Где находится система Python.путь от инициализации?
где находится система Python.путь от инициализации?
UPD: Python добавляет некоторые пути перед ссылкой на PYTHONPATH:
>>> import sys
>>> from pprint import pprint as p
>>> p(sys.path)
['',
'C:Python25libsite-packagessetuptools-0.6c9-py2.5.egg',
'C:Python25libsite-packagesorbited-0.7.8-py2.5.egg',
'C:Python25libsite-packagesmorbid-0.8.6.1-py2.5.egg',
'C:Python25libsite-packagesdemjson-1.4-py2.5.egg',
'C:Python25libsite-packagesstomper-0.2.2-py2.5.egg',
'C:Python25libsite-packagesuuid-1.30-py2.5.egg',
'C:Python25libsite-packagesstompservice-0.1.0-py2.5.egg',
'C:Python25libsite-packagescherrypy-3.0.1-py2.5.egg',
'C:Python25libsite-packagespyorbited-0.2.2-py2.5.egg',
'C:Python25libsite-packagesflup-1.0.1-py2.5.egg',
'C:Python25libsite-packageswsgilog-0.1-py2.5.egg',
'c:testdir',
'C:Windowssystem32python25.zip',
'C:Python25DLLs',
'C:Python25lib',
'C:Python25libplat-win',
'C:Python25liblib-tk',
'C:Python25',
'C:Python25libsite-packages',
'C:Python25libsite-packagesPIL',
'C:Python25libsite-packageswin32',
'C:Python25libsite-packageswin32lib',
'C:Python25libsite-packagesPythonwin']
мой PYTHONPATH это:
PYTHONPATH=c:testdir
мне интересно, где эти пути, прежде чем PYTHONPATH они взялись?
2 ответа:
Python действительно старается разумно установить
sys.path
. Как это набор может получить действительносложные. Следующее руководство является разбавленным, несколько-неполное, несколько-неправильное, но, надеюсь,-полезное руководство для рядового программиста python того, что происходит, когда python выясняет, что использовать в качестве начальные значения наsys.path
,sys.executable
,sys.exec_prefix
иsys.prefix
на нормальный питон установка.во-первых, python делает все возможное, чтобы выяснить его фактическое физическое состояние расположение в файловой системе на основе того, что говорит операционная система оно. Если ОС просто говорит, что" python " работает, он находится в $PATH. Он разрешает любые символические ссылки. После того, как он сделал это, путь исполняемый файл, который он находит используется в качестве значения для
sys.executable
, нет сослагательного наклонения, ands, или buts.далее, он определяет начальные значения
sys.exec_prefix
иsys.prefix
.если есть файл с именем
pyvenv.cfg
в том же каталоге, что иsys.executable
или один каталог вверх, python смотрит на него. Отличающийся Осы делают разные вещи с этим файлом.одно из значений в этом конфигурационном файле, которое ищет python параметр конфигурации
home = <DIRECTORY>
. Python будет использовать этот каталог вместо каталог, содержащийsys.executable
когда он динамически устанавливает начальное значениеsys.prefix
позже. Еслиapplocal = true
настройка отображается в окнеpyvenv.cfg
файл на Windows, но неhome = <DIRECTORY>
настройка, тогдаsys.prefix
будет установлен в директорию, содержащуюsys.executable
.далее
PYTHONHOME
переменные среды изучается. На Linux и Mac,sys.prefix
иsys.exec_prefix
установленPYTHONHOME
переменной окружения, если она существует,замещает любойhome = <DIRECTORY>
настройка вpyvenv.cfg
. в Windows,sys.prefix
иsys.exec_prefix
установлен доPYTHONHOME
переменные среды , если он существует, если ahome = <DIRECTORY>
настройка присутствует вpyvenv.cfg
, который используется вместо этого.иначе
sys.prefix
иsys.exec_prefix
находятся, идя назад из расположенияsys.executable
или даноpyvenv.cfg
если таковые имеются.если файл
lib/python<version>/dyn-load
найдено в каталоге или любой из его родительских каталогов, что каталог установлен, чтобы бытьsys.exec_prefix
на Linux или Mac. Если файлlib/python<version>/os.py
is находится в каталоге или любой из его подкаталоги, этот каталог имеет значениеsys.prefix
на Linux, Mac и Windows, сsys.exec_prefix
установить то же значение, что иsys.prefix
на Windows. Весь этот шаг пропускается в Windows, еслиapplocal = true
установлен. Либо каталогsys.executable
is используется или, еслиhome
находится вpyvenv.cfg
, который используется вместо начальное значениеsys.prefix
.если он не может найти эти "знаковые" файлы или
sys.prefix
не было найдено еще, то python устанавливаетsys.prefix
в "резервный" значение. Linux и Mac, например, используют предварительно скомпилированные значения по умолчанию в качестве значенияsys.prefix
иsys.exec_prefix
. Ожидания Windows покаsys.path
полностью выяснено, чтобы установить резервное значение дляsys.prefix
.затем, (то, что вы все ждали,) python определяет начальные значения это должно содержаться в
sys.path
.
- каталог скрипта, который выполняет python, добавляется в
sys.path
. В Windows это всегда пустая строка, которая сообщает python вместо этого используйте текущий рабочий каталог.- содержание переменной среды PYTHONPATH, если она установлена, добавляется в
sys.path
,если ты на окнах иapplocal
имеет значение true вpyvenv.cfg
.- путь к zip-файлу, который является
<prefix>/lib/python35.zip
на Linux/Mac иos.path.join(os.dirname(sys.executable), "python.zip")
на Windows, добавляется кsys.path
.- если на Windows и нет
applocal = true
была установлена вpyvenv.cfg
, затем содержимое подразделов реестраHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
добавляются, если таковые имеются.- если на Windows и нет
applocal = true
была установлена вpyvenv.cfg
, иsys.prefix
не удалось найти, тогда основного содержания из реестраHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
добавляется, если он существует;- если на Windows и нет
applocal = true
была установлена вpyvenv.cfg
, затем содержимое подразделов реестраHK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\
добавляются, если таковые имеются.- если на Windows и нет
applocal = true
была установлена вpyvenv.cfg
иsys.prefix
не удалось найти, тогда основного содержания из реестраHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
добавляется, если это существует;- если на Windows, и PYTHONPATH не был установлен, префикс не был найден, и никакие ключи реестра не присутствовали, то относительное значение времени компиляции PYTHONPATH добавляется; в противном случае этот шаг игнорируется.
- пути во время компиляции макроса PYTHONPATH добавляются относительно динамически найденного
sys.prefix
.- на Mac и Linux, значение - это. В Windows, каталог который был использован (или был бы использован) для поиска динамически для
sys.prefix
is добавлен.на этом этапе в Windows, если префикс не был найден, то python попытается определите его путем поиска все каталоги
sys.path
для файлов ориентиров, как это пытались сделать в каталогеsys.executable
ранее, пока он не найдет что-то. Если это не так,sys.prefix
остается пустым.наконец, после всего этого, Python загружает
site
модуль, который добавляет материал еще дальшеsys.path
:он начинается с построения до четырех каталогов из головы и a хвостовая часть. Для головной части, он использует
sys.prefix
иsys.exec_prefix
; пустые головы пропускаются. Для хвостовой части, он использует пустую строку а потомlib/site-packages
(в Windows) илиlib/pythonX.Y/site-packages
а потомlib/site-python
(на Unix и Macintosh). Для каждого из различные комбинации голова-хвост, он видит, если это относится к существующему каталог, и если это так, добавляет его в sys.путь и также проверяет заново добавлен путь к файлам конфигурации.