Инициализация пути поиска модулей sys.path
Путь поиска модулей инициализируется при запуске Python. Доступ к этому пути поиска модулей можно получить через sys.path.
Первой записью в пути поиска модулей является каталог, содержащий входной скрипт, если он есть. В противном случае первой записью является текущий каталог — так происходит при запуске интерактивной оболочки, команды -c или модуля -m.
Переменная среды PYTHONPATH часто используется для добавления каталогов в путь поиска. Если эта переменная среды задана, её содержимое добавляется в путь поиска модулей.
Примечание
PYTHONPATH влияет на все установленные версии и окружения Python. Будьте осторожны, задавая её в профиле оболочки или глобальных переменных среды. Модуль site предлагает более гибкие способы настройки, описанные ниже.
Затем добавляются каталоги со стандартными модулями Python, а также любые модули расширения, от которых зависят эти модули. Модули расширения — это файлы .pyd в Windows и файлы .so на других платформах. Каталог с независимыми от платформы модулями Python называется prefix. Каталог с модулями расширения называется exec_prefix.
Переменную среды PYTHONHOME можно использовать для задания расположений prefix и exec_prefix. В противном случае эти каталоги определяются, начиная с расположения исполняемого файла Python и выполняя поиск различных файлов и каталогов-«ориентиров». Обратите внимание, что все символические ссылки разрешаются, поэтому в качестве начальной точки поиска используется фактическое расположение исполняемого файла Python. Расположение исполняемого файла Python называется home.
После определения home каталог prefix ищется сначала по файлу pythonmajorversionminorversion.zip (python311.zip). В Windows zip-архив ищется в home, а в Unix ожидается, что архив находится в lib. Обратите внимание, что ожидаемое расположение zip-архива добавляется в путь поиска модулей, даже если архив не существует. Если архив не найден, Python в Windows продолжит поиск prefix, проверяя наличие Lib\os.py. Python в Unix будет искать lib/pythonmajorversion.minorversion/os.py (lib/python3.11/os.py). В Windows prefix и exec_prefix совпадают, однако на других платформах выполняется поиск lib/pythonmajorversion.minorversion/lib-dynload (lib/python3.11/lib-dynload), используемого в качестве опорной точки для exec_prefix. На некоторых платформах lib может быть равно lib64 или иметь другое значение; см. sys.platlibdir и PYTHONPLATLIBDIR.
После их обнаружения значения prefix и exec_prefix доступны соответственно в sys.base_prefix и sys.base_exec_prefix.
Если переменная PYTHONHOME не задана и файл pyvenv.cfg найден рядом с основным исполняемым файлом или в его родительском каталоге, значения sys.prefix и sys.exec_prefix устанавливаются в каталог, содержащий pyvenv.cfg. В противном случае они устанавливаются соответственно в те же значения, что и sys.base_prefix и sys.base_exec_prefix. Это используется виртуальными окружениями.
Наконец, обрабатывается модуль site, и в путь поиска модулей добавляются каталоги site-packages. Распространённый способ настроить путь поиска — создать модули sitecustomize или usercustomize, как описано в документации модуля site.
Примечание
Некоторые параметры командной строки могут дополнительно влиять на вычисление путей. Подробнее см. -E, -I, -s и -S.
Изменено в версии 3.14: sys.prefix и sys.exec_prefix теперь устанавливаются в каталог pyvenv.cfg во время инициализации пути. Ранее это выполнял модуль site, поэтому на это влиял параметр -S.
Виртуальные окружения
Виртуальные окружения помещают файл pyvenv.cfg в свой префикс, из-за чего sys.prefix и sys.exec_prefix указывают на них, а не на базовую установку.
Значения prefix и exec_prefix базовой установки доступны в sys.base_prefix и sys.base_exec_prefix.
Помимо использования в качестве маркера для определения виртуальных окружений, pyvenv.cfg также можно использовать для настройки инициализации site. См. документацию по виртуальным окружениям модуля site.
Примечание
PYTHONHOME отменяет обнаружение pyvenv.cfg.
Примечание
Существуют и другие способы реализации «виртуальных окружений»; в этой документации рассматриваются реализации, основанные на механизме pyvenv.cfg, например venv. Большинство реализаций виртуальных окружений следуют модели, заданной venv, однако существуют и необычные реализации, которые от неё отличаются.
Файлы _pth
Чтобы полностью переопределить sys.path, создайте файл ._pth с тем же именем, что и у общей библиотеки или исполняемого файла (python._pth или python311._pth). Путь к общей библиотеке всегда известен в Windows, однако на других платформах он может быть недоступен. В файле ._pth укажите по одной строке для каждого пути, который нужно добавить в sys.path. Файл, имя которого основано на имени общей библиотеки, имеет приоритет над файлом, основанным на имени исполняемого файла. Это позволяет при необходимости ограничить пути для любой программы, загружающей среду выполнения.
Если такой файл существует, все переменные реестра и среды игнорируются, включается изолированный режим, а site не импортируется, если только в файле не указана строка import site. Пустые пути и строки, начинающиеся с #, игнорируются. Каждый путь может быть абсолютным или относительным к расположению файла. Операторы импорта, кроме импорта site, не разрешены, а произвольный код указывать нельзя.
Обратите внимание, что файлы .pth (без начального символа подчёркивания) будут обрабатываться модулем site обычным образом, если задано import site.
Встраиваемый Python
Если Python встраивается в другое приложение, для инициализации Python можно использовать Py_InitializeFromConfig() и структуру PyConfig. Подробные сведения о настройке путей приведены в разделе Настройка путей Python.
См. также
- Поиск модулей — подробные сведения о Windows.
- Использование Python на платформах Unix — подробные сведения о Unix.
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/sys_path_init.html