Инициализация пути поиска модулей 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.
См. также
- Поиск модулей для подробных замечаний по Windows.
- Использование Python на платформах Unix для подробностей по Unix.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/sys_path_init.html