Где находится система 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.pyis находится в каталоге или любой из его подкаталоги, этот каталог имеет значениеsys.prefixна Linux, Mac и Windows, сsys.exec_prefixустановить то же значение, что иsys.prefixна Windows. Весь этот шаг пропускается в Windows, еслиapplocal = trueустановлен. Либо каталогsys.executableis используется или, если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.prefixis добавлен.на этом этапе в 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.путь и также проверяет заново добавлен путь к файлам конфигурации.