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. Подробности, специфичные для пути, описаны в Конфигурации пути Python. В качестве альтернативы можно использовать устаревший 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