Установить pythonpath перед операциями импорта
Мой код:
import scriptlib.abc
import scriptlib.xyz
def foo():
... some operations
но scriptlib находится в другом каталоге, поэтому мне придется включить этот каталог в переменную окружения "PYTHONPATH".
В любом случае я могу добавить каталог scriptlib в переменную среды "PYTHONPATH" перед выполнением оператора импорта, например:
import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz
def foo():
... some operations
Если это так, это значение только для этой командной строки или глобально?
Заранее спасибо
Ответы
Ответ 1
Это добавит путь к вашему процессу/экземпляру Python (т.е. исполняемый исполняемый файл). Путь не будет изменен для любых других процессов Python. Другая работающая программа Python не изменит свой путь, и если вы выйдете из своей программы и снова запустите, то путь не будет включать то, что вы добавили ранее. Что вы делаете, как правило, правильно.
set.py:
import sys
sys.path.append("/tmp/TEST")
loop.py
import sys
import time
while True:
print sys.path
time.sleep(1)
run: python loop.py &
Это запустит loop.py, подключенный к вашему STDOUT, и он будет продолжать работать в фоновом режиме. Затем вы можете запустить python set.py
. Каждый из них имеет другой набор переменных окружения. Обратите внимание, что вывод из loop.py
не изменяется, поскольку set.py
не изменяет среду loop.py
.
Заметка об импорте
Импорт Python динамичен, как и весь остальной язык. Статическая связь не происходит. Импорт - это исполняемая строка, как sys.path.append...
.
Ответ 2
Как также отмечено в документах здесь.
Перейдите к Python X.X/Lib
и добавьте эти строки в site.py
там,
import sys
sys.path.append("yourpathstring")
Это изменяет ваш sys.path
так, чтобы при каждой загрузке он имел это значение в нем.
Как указано здесь о site.py
,
Этот модуль автоматически импортируется во время инициализации. Импорт этого модуля добавит пути к конкретному сайту в путь поиска модуля и добавит несколько встроенных компонентов.
Для других возможных способов добавления некоторого пути к sys.path
см. эти документы