Spec-Zone.ru › Python 3.12

Инициализация пути поиска модулей 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.prefix и sys.exec_prefix.

Наконец, обрабатывается модуль site, а в путь поиска модулей добавляются каталоги site-packages. Распространённый способ настройки пути поиска — создание модулей sitecustomize или usercustomize, как описано в документации модуля site.

Примечание

Некоторые параметры командной строки могут дополнительно влиять на вычисление путей. Подробнее см. -E, -I, -s и -S.

Виртуальные среды

Если Python запущен в виртуальной среде (описанной в разделе Виртуальные среды и пакеты), то prefix и exec_prefix относятся к этой виртуальной среде.

Если файл pyvenv.cfg найден рядом с основным исполняемым файлом или в каталоге на уровень выше него, действуют следующие особенности:

  • Если home — абсолютный путь, а переменная среды PYTHONHOME не задана, этот путь используется вместо пути к основному исполняемому файлу при определении prefix и exec_prefix.

Файлы _pth

Чтобы полностью переопределить sys.path, создайте файл ._pth с тем же именем, что у динамической библиотеки или исполняемого файла (python._pth или python311._pth). В Windows путь к динамической библиотеке всегда известен, но на других платформах он может быть недоступен. В файле ._pth укажите по одному пути на строку, чтобы добавить их в sys.path. Файл, имя которого основано на имени динамической библиотеки, имеет приоритет над файлом, имя которого основано на имени исполняемого файла. Это позволяет при необходимости ограничить пути для любой программы, загружающей среду выполнения.

Если файл существует, все переменные реестра и среды игнорируются, включается изолированный режим, а модуль site не импортируется, если только в файле не указана строка import site. Пустые пути и строки, начинающиеся с #, игнорируются. Каждый путь может быть абсолютным или относительным к расположению файла. Импортировать разрешено только site; произвольный код указывать нельзя.

Обратите внимание, что файлы .pth (без начального символа подчёркивания) будут обычно обработаны модулем site, если задан параметр import site.

Встраиваемый Python

Если Python встраивается в другое приложение, для его инициализации можно использовать Py_InitializeFromConfig() и структуру PyConfig. Подробное описание настройки путей приведено в разделе Настройка путей Python. Кроме того, для пропуска инициализации пути поиска модулей можно использовать более старый API Py_SetPath().

См. также

  • Поиск модулей — подробные примечания для Windows.
  • Использование Python на платформах Unix — сведения о Unix.

© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/sys_path_init.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API