2015-09-09 3 views
1

Я динамически установки кода во время выполнения сценария непосредственно импортировать модуль пип и установка requirements.txt:не может импортировать динамически установлен модуль питона

import pip 
import site 
import sys 

# since I'm installing with --user, packages should be installed here, 
# so make sure it's on the path 
sys.path.insert(0, site.USER_SITE) 

pip.main(["install", "--user", "package1"]) 
import package1 

Пакет устанавливает без ошибок, но import package1 терпит неудачу. Если я выйду из сценария и запустил его снова, не выполняя установку (поскольку он уже установлен), он работает нормально.

Я также проверил, что site.USER_SITE, где был установлен пакет1. Все находится на sys.path, но я все еще не могу его импортировать.

ответ

1

Ну, это был быстрый поворот. Я пытался понять это в течение нескольких дней и, наконец, придумал свой ответ через несколько минут после запроса здесь.

Если путь, который еще не существует, добавлен к sys.path, кажется, что он никогда не будет проверяться при импорте модулей, даже если он существует в более поздней точке (или, по крайней мере, в python 2.7).

В моем тестировании site.USER_SITE не было, когда я добавил его к sys.path. Если я сначала убедился, что этот каталог существует, то все работает так, как вы думаете, он должен:

import os 
import pip 
import site 
import sys 

# this makes it work 
if not os.path.exists(site.USER_SITE): 
    os.makedirs(site.USER_SITE) 

# since I'm installing with --user, packages should be installed here, 
# so make sure it's on the path 
sys.path.insert(0, site.USER_SITE) 

pip.main(["install", "--user", "package1"]) 
import package1 
Смежные вопросы