Содержание страницы
Инициализация sys.path пути поиска модулей¶The initialization of the sys.path module search 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.
Виртуальные окружения¶Virtual Environments
Виртуальные окружения помещают файл 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¶_pth files
Чтобы полностью переопределить sys.path, создайте файл ._pth с тем же именем, что и у общей библиотеки или исполняемого файла (python._pth или python311._pth). Путь к общей библиотеке всегда известен в Windows, однако на других платформах он может быть недоступен. В файле ._pth укажите по одной строке для каждого пути, добавляемого в sys.path. Файл, основанный на имени общей библиотеки, переопределяет файл, основанный на исполняемом файле, что позволяет при желании ограничить пути для любой программы, загружающей среду выполнения.
Если файл существует, все реестровые и переменные окружения игнорируются, включается изолированный режим, и site не импортируется, если только одна из строк файла не указывает import site. Пустые пути и строки, начинающиеся с #, игнорируются. Каждый путь может быть абсолютным или относительным относительно расположения файла. Операторы импорта, кроме site, не допускаются, и произвольный код не может быть задан.
Обратите внимание, что файлы .pth (без ведущего подчёркивания) будут обрабатываться модулем site в обычном порядке, если указан import site.
Встраиваемый Python¶Embedded Python
Если Python встраивается в другое приложение, Py_InitializeFromConfig() и структура PyConfig могут использоваться для инициализации Python. Подробности, касающиеся пути, описаны в конфигурации пути поиска Python.
См. также
Поиск модулей для подробных замечаний по Windows.
Использование Python на платформах Unix для подробностей по Unix.