Spec-Zone.ru › Python 3.9

site — Модуль настройки конфигурации сайта

Исходный код: Lib/site.py

Этот модуль автоматически импортируется во время инициализации. Автоматический импорт можно отключить, используя опцию интерпретатора -S.

Импорт этого модуля добавит пути, специфичные для сайта, в путь поиска модулей и добавит несколько встроенных функций, если не использовалась опция -S. В этом случае модуль можно безопасно импортировать без автоматических изменений пути поиска модулей или добавления встроенных функций. Чтобы явно вызвать стандартные добавления, относящиеся к сайту, вызовите функцию site.main().

Изменено в версии 3.3: Импорт модуля теперь вызывал манипуляции с путями даже при использовании опции -S.

Он начинается с построения до четырёх директорий из головной и хвостовой части. Для головной части он использует sys.prefix и sys.exec_prefix; пустые головные части пропускаются. Для хвостовой части он использует пустую строку, а затем lib/site-packages (в Windows) или lib/pythonX.Y/site-packages (в Unix и macOS). Для каждой уникальной комбинации головной и хвостовой части проверяется, существует ли соответствующая директория, и если да, добавляется в sys.path, а также проверяются новые добавленные пути на наличие конфигурационных файлов.

Изменено в версии 3.5: Поддержка директории «site-python» была удалена.

Если файл с именем «pyvenv.cfg» существует на один уровень выше sys.executable, sys.prefix и sys.exec_prefix устанавливаются на эту директорию, и также проверяется наличие site-packages (sys.base_prefix и sys.base_exec_prefix всегда будут «настоящими» префиксами установки Python). Если «pyvenv.cfg» (файл конфигурации для запуска) содержит ключ «include-system-site-packages», установленный на значение отличное от «true» (регистронезависимо), то пути системных префиксов для поиска site-packages не будут использоваться; в противном случае будут.

Файл конфигурации путей — это файл, имя которого имеет вид name.pth и существует в одной из четырёх директорий, упомянутых выше; его содержимое — это дополнительные элементы (по одному на строку), которые должны быть добавлены в sys.path. Несуществующие элементы никогда не добавляются в sys.path, и не проверяется, что элемент относится к директории, а не к файлу. Ни один элемент не добавляется в sys.path более одного раза. Пустые строки и строки, начинающиеся с #, пропускаются. Строки, начинающиеся с import (за которыми следуют пробел или табуляция), выполняются.

Примечание

Выполнимая строка в файле .pth выполняется при каждом запуске Python, независимо от того, будет ли фактически использоваться конкретный модуль. Поэтому её влияние должно быть минимальным. Основное предназначение выполняемых строк — сделать соответствующие модули импортируемыми (загрузка хуков импорта сторонних модулей, настройка PATH и т. д.). Любая другая инициализация предполагается осуществлять при фактическом импорте модуля, если и когда это произойдёт. Ограничение кода одной строкой является намеренной мерой, чтобы не допускать ничего более сложного здесь.

Например, предположим, что sys.prefix и sys.exec_prefix установлены на значение /usr/local. Библиотека Python X.Y затем установлена в /usr/local/lib/pythonX.Y. Предположим, что она имеет поддиректорию /usr/local/lib/pythonX.Y/site-packages с тремя подподдиректориями, foo, bar и spam, и двумя файлами конфигурации путей, foo.pth и bar.pth. Предположим, что foo.pth содержит следующее:

# foo package configuration

foo
bar
bletch

и bar.pth содержит:

# bar package configuration

bar

Тогда следующие директории, специфичные для версии, добавляются в sys.path, в указанном порядке:

/usr/local/lib/pythonX.Y/site-packages/bar
/usr/local/lib/pythonX.Y/site-packages/foo

Обратите внимание, что bletch опущена, потому что она не существует; директория bar предшествует директории foo, потому что bar.pth идёт в алфавитном порядке раньше foo.pth; и spam опущена, потому что она не указана ни в одном файле конфигурации путей.

После этих манипуляций с путями делается попытка импортировать модуль с именем sitecustomize, который может выполнять произвольные пользовательские настройки сайта. Как правило, он создаётся системным администратором в каталоге site-packages. Если этот импорт завершается ошибкой ImportError или исключением, являющимся его подклассом, и атрибут исключения name равен 'sitecustomize', то оно игнорируется. Если Python запущен без доступных потоков вывода, как в случае с pythonw.exe в Windows (который используется по умолчанию для запуска IDLE), попытки вывода от sitecustomize игнорируются. Любое другое исключение приводит к безмолвному и, возможно, загадочному завершению процесса.

Затем предпринимается попытка импортировать модуль с именем usercustomize, который может выполнять произвольные пользовательские настройки, если ENABLE_USER_SITE истинно. Этот файл предназначен для создания в пользовательской директории site-packages (см. ниже), которая является частью sys.path , если это не отключено опцией -s. Если этот импорт завершается ошибкой ImportError или исключением, являющимся его подклассом, и атрибут исключения name равен 'usercustomize', то оно игнорируется.

Обратите внимание, что для некоторых систем, отличных от Unix, sys.prefix и sys.exec_prefix пустые, и манипуляции с путями пропускаются; однако импорт sitecustomize и usercustomize всё ещё предпринимается.

Настройка Readline

На системах, поддерживающих readline, этот модуль также импортирует и настраивает модуль rlcompleter, если Python запущен в интерактивном режиме и без опции -S. По умолчанию включена автодополнение по табуляции, а в качестве файла сохранения истории используется ~/.python_history. Для отключения удалите (или переопределите) атрибут sys.__interactivehook__ в модуле sitecustomize или usercustomize или в файле PYTHONSTARTUP.

Изменено в версии 3.4: Активация rlcompleter и истории была автоматизирована.

Содержание модуля

site.PREFIXES

Список префиксов для каталогов site-packages.

site.ENABLE_USER_SITE

Флаг, показывающий состояние каталога пользовательских site-packages. True означает, что он включён и был добавлен в sys.path. False означает, что он был отключён по запросу пользователя (с помощью -s или PYTHONNOUSERSITE). None означает, что он был отключён по соображениям безопасности (несовпадение идентификаторов пользователя или группы и эффективных идентификаторов) или администратором.

site.USER_SITE

Путь к каталогу пользовательских site-packages для запускаемого Python. Может быть None если getusersitepackages() ещё не был вызван. Значение по умолчанию — ~/.local/lib/pythonX.Y/site-packages для UNIX и не-фреймворковых macOS сборок, ~/Library/Python/X.Y/lib/python/site-packages для macOS фреймворковых сборок и %APPDATA%\Python\PythonXY\site-packages в Windows. Этот каталог является каталогом сайта, что означает, что .pth файлы в нём будут обработаны.

site.USER_BASE

Путь к базовому каталогу для пользовательских site-packages. Может быть None если getuserbase() ещё не был вызван. Значение по умолчанию — ~/.local для UNIX и macOS не-фреймворковых сборок, ~/Library/Python/X.Y для macOS фреймворковых сборок и %APPDATA%\Python для Windows. Это значение используется Distutils для вычисления каталогов установки скриптов, данных, модулей Python и т. д. для схемы установки для пользователя. См. также PYTHONUSERBASE.

site.main()

Добавляет все стандартные каталоги, специфичные для сайта, в путь поиска модулей. Эта функция вызывается автоматически при импорте этого модуля, если интерпретатор Python не был запущен со флагом -S.

Изменено в версии 3.3: Эта функция раньше вызывалась безусловно.

site.addsitedir(sitedir, known_paths=None)

Добавляет каталог в sys.path и обрабатывает его .pth файлы. Обычно используется в sitecustomize или usercustomize (см. выше).

site.getsitepackages()

Возвращает список, содержащий все глобальные каталоги site-packages.

Введено в версии 3.2.

site.getuserbase()

Возвращает путь к каталогу базового каталога пользователя, USER_BASE. Если он ещё не инициализирован, эта функция также инициализирует его, учитывая PYTHONUSERBASE.

Введено в версии 3.2.

site.getusersitepackages()

Возвращает путь к каталогу site-packages, специфичному для пользователя, USER_SITE. Если он ещё не инициализирован, эта функция также инициализирует его, учитывая USER_BASE. Чтобы определить, был ли каталог пользовательских site-packages добавлен в sys.path следует использовать ENABLE_USER_SITE.

Введено в версии 3.2.

Интерфейс командной строки

Модуль site также предоставляет способ получения пользовательских каталогов из командной строки:

$ python3 -m site --user-site
/home/user/.local/lib/python3.3/site-packages

Если он вызывается без аргументов, он выведет содержимое sys.path в стандартный вывод, за которым последует значение USER_BASE и существует ли каталог, затем то же самое для USER_SITE и, наконец, значение ENABLE_USER_SITE.

--user-base

Выводит путь к каталогу базового каталога пользователя.

--user-site

Выводит путь к каталогу пользовательских site-packages.

Если оба параметра указаны, каталог базового каталога пользователя и каталог пользовательских site-packages будут выведены (всегда в этом порядке), разделенные os.pathsep.

Если какой-либо параметр указан, сценарий завершится одним из этих значений: 0 если каталог пользовательских site-packages включён, 1 если он был отключён пользователем, 2 если он отключён по соображениям безопасности или администратором, и значение больше 2, если произошла ошибка.

См. также

PEP 370 – Каталог site-packages для каждого пользователя

© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/site.html

Spec-Zone.ru

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