Где находится система 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 79

2 ответа:

"инициализируется из переменной среды PYTHONPATH, а также зависит от установки по умолчанию"

-- http://docs.python.org/library/sys.html#sys.path

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 переменные среды , если он существует, если a home = <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.

  1. каталог скрипта, который выполняет python, добавляется в sys.path. В Windows это всегда пустая строка, которая сообщает python вместо этого используйте текущий рабочий каталог.
  2. содержание переменной среды PYTHONPATH, если она установлена, добавляется в sys.path,если ты на окнах и applocal имеет значение true в pyvenv.cfg.
  3. путь к zip-файлу, который является <prefix>/lib/python35.zip на Linux/Mac и os.path.join(os.dirname(sys.executable), "python.zip") на Windows, добавляется к sys.path.
  4. если на Windows и нет applocal = true была установлена в pyvenv.cfg, затем содержимое подразделов реестра HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ добавляются, если таковые имеются.
  5. если на Windows и нет applocal = true была установлена в pyvenv.cfg, и sys.prefix не удалось найти, тогда основного содержания из реестра HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ добавляется, если он существует;
  6. если на Windows и нет applocal = true была установлена в pyvenv.cfg, затем содержимое подразделов реестра HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\ добавляются, если таковые имеются.
  7. если на Windows и нет applocal = true была установлена в pyvenv.cfg и sys.prefix не удалось найти, тогда основного содержания из реестра HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ добавляется, если это существует;
  8. если на Windows, и PYTHONPATH не был установлен, префикс не был найден, и никакие ключи реестра не присутствовали, то относительное значение времени компиляции PYTHONPATH добавляется; в противном случае этот шаг игнорируется.
  9. пути во время компиляции макроса PYTHONPATH добавляются относительно динамически найденного sys.prefix.
  10. на 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.путь и также проверяет заново добавлен путь к файлам конфигурации.