Инициализация пути поиска модулей 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. Пустые пути и строки, начинающиеся с #, игнорируются. Каждый путь может быть абсолютным или относительным к местоположению файла. Заявления import, кроме импорта site, не допускаются, и произвольный код не может быть указан.
Обратите внимание, что файлы .pth (без ведущей подчёркивания) будут обрабатываться модулем site в обычном режиме, когда import site задан.
Встроенный Python
Если Python встроен в другое приложение, можно использовать Py_InitializeFromConfig() и структуру PyConfig для его инициализации. Подробности, относящиеся к пути, описаны в Конфигурация путей Python. В качестве альтернативы, можно использовать более старую функцию Py_SetPath() для обхода инициализации пути поиска модулей.
См. также
- Поиск модулей для подробных заметок по Windows.
- Использование Python на платформах Unix для подробностей по Unix.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/sys_path_init.html