Что именно должно быть установлено в PYTHONPATH?
Я просматриваю и записываю установочный документ для других разработчиков при работе над проектом python, и я читаю переменную среды PYTHONPATH
. Я смотрю на свою текущую систему разработки и думаю, что у меня есть несколько неправильных вещей, из-за которых моя IDE (IntelliJ) ведет себя неправильно при поиске библиотек python.
Я посмотрел документацию здесь и здесь, и я все еще не уверены, что должно быть в переменной среды PYTHONPATH
.
У меня PYTHONHOME
указана на `C:\Python27 '.
Мой текущий PYTHONPATH
установлен на PYTHONHOME
. Должен ли я также добавлять каталоги из sys.path
?
UPDATE:
Основываясь на приведенной ниже информации, PYTHONPATH
не нужно устанавливать, если есть нестандартные библиотеки, которые вы хотите, чтобы python мог найти по умолчанию. Например, когда я установлю wxPython из установщика, он добавит свои библиотеки в PYTHONPATH
. Я устанавливаю PYTHONHOME
в корневую установку python, чтобы добавить его в свою переменную окружения PATH
, чтобы я мог запускать python из любого места.
Ответы
Ответ 1
Вам не нужно устанавливать ни один из них. PYTHONPATH может быть настроен на указание дополнительных каталогов с частными библиотеками в них. Если PYTHONHOME не установлен, Python по умолчанию использует каталог, в котором найден python.exe, поэтому dir должен находиться в PATH.
Ответ 2
Для большинства установок вы не должны устанавливать эти переменные, поскольку они не нужны для запуска Python. Python знает, где найти стандартную библиотеку.
Единственная причина для установки PYTHONPATH - это поддерживать каталоги пользовательских библиотек Python, которые вы не хотите устанавливать в глобальном местоположении по умолчанию (т.е. в каталоге site-packages
).
Обязательно прочтите: http://docs.python.org/using/cmdline.html#environment-variables
Ответ 3
Вот что я узнал: PYTHONPATH - это каталог для добавления к пути поиска импорта Python "sys.path", который состоит из текущего каталога. CWD, PYTHONPATH, стандартная и общая библиотека, а также библиотека клиентов. Например:
% python3 -c "import sys;print(sys.path)"
['',
'/home/username/Documents/DjangoTutorial/mySite',
'/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
где первый путь '' обозначает текущий каталог, 2-й путь через
%export PYTHONPATH=/home/username/Documents/DjangoTutorial/mySite
который можно добавить в ~/.bashrc, чтобы сделать его постоянным, а остальные - стандартные Python и динамическая общая библиотека, а также сторонние библиотеки, такие как django.
Как было сказано, не связывайтесь с PYTHONHOME, даже если установить его в '' или 'None', оболочка python3 перестанет работать:
% export PYTHONHOME=''
% python3
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
Current thread 0x00007f18a44ff740 (most recent call first):
Aborted (core dumped)
Обратите внимание, что если вы запустите скрипт Python, CWD будет каталогом скрипта.
Например:
[email protected]:~/Documents/DjangoTutorial% python3 mySite/manage.py runserver
==== Printing sys.path ====
/home/username/Documents/DjangoTutorial/mySite # CWD is where manage.py resides
/usr/lib/python3.6
/usr/lib/python3.6/lib-dynload
/usr/local/lib/python3.6/dist-packages
/usr/lib/python3/dist-packages
Вы также можете добавить путь к sys.path во время выполнения:
Предположим, у вас есть файл Fibonacci.py в каталоге ~/Documents/Python:
[email protected]:~/Documents/DjangoTutorial% python3
>>> sys.path.append("/home/username/Documents")
>>> print(sys.path)
['', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages',
'/home/username/Documents']
>>> from Python import Fibonacci as fibo
или через
% PYTHONPATH=/home/username/Documents:$PYTHONPATH
% python3
>>> print(sys.path)
['',
'/home/username/Documents', '/home/username/Documents/DjangoTutorial/mySite',
'/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
>>> from Python import Fibonacci as fibo