Содержание страницы
29.13. site – Хук конфигурации для конкретного сайта¶site – Site-specific configuration hook
Исходный код: 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 и Macintosh). Для каждой
из различных комбинаций головы и хвоста проверяется, указывает ли она на существующий
каталог, и если да, то добавляет его в 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», установленный во что-либо отличное от «false» (без учёта регистра), то системные префиксы всё равно будут проверяться на site-packages; в противном случае – нет.
Файл конфигурации пути – это файл, имя которого имеет вид name.pth и находится в одном из четырёх упомянутых выше каталогов; его содержимое – это дополнительные элементы (по одному на строку), которые добавляются в sys.path. Несуществующие элементы никогда не добавляются в sys.path, и не проверяется, является ли элемент каталогом, а не файлом. Ни один элемент не добавляется в sys.path более одного раза. Пустые строки и строки, начинающиеся с #, пропускаются. Строки, начинающиеся с import (с последующим пробелом или табуляцией), выполняются.
Например, предположим, что 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, оно молча игнорируется.
Если Python запущен без доступных выходных потоков, как в случае с pythonw.exe в Windows (который используется по умолчанию для запуска IDLE),
попытка вывода от sitecustomize игнорируется. Любое исключение, отличное от ImportError,
вызывает тихий и, возможно, загадочный сбой процесса.
После этого предпринимается попытка импортировать модуль с именем usercustomize,
который может выполнять произвольные настройки пользователя, если
ENABLE_USER_SITE истинно. Этот файл предназначен для создания в
каталоге user site-packages (см. ниже), который является частью sys.path, если не
отключен с помощью -s. Исключение ImportError будет молча игнорироваться.
Обратите внимание, что для некоторых систем, не являющихся Unix, sys.prefix и sys.exec_prefix пусты, и манипуляции с путями пропускаются; однако импорт sitecustomize и usercustomize всё равно предпринимается.
29.13.1. Конфигурация Readline¶Readline configuration
В системах, поддерживающих readline, этот модуль также импортирует и настраивает модуль rlcompleter, если Python запущен в интерактивном режиме и без опции -S. Поведение по умолчанию – включить автодополнение по табуляции и использовать ~/.python_history в качестве файла сохранения истории. Чтобы отключить его, удалите (или переопределите) атрибут sys.__interactivehook__ в модуле sitecustomize или usercustomize или в файле PYTHONSTARTUP.
Изменено в версии 3.4: Активация rlcompleter и истории стала автоматической.
29.13.2. Содержимое модуля¶Module contents
-
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 и Mac без фреймворка сборки OS X,~/Library/Python/X.Y/lib/python/site-packagesдля Mac сборки с фреймворком и%APPDATA%\Python\PythonXY\site-packagesв Windows. Этот каталог является site-каталогом, что означает, что.pthфайлы в нём будут обработаны.
-
site.USER_BASE¶ Путь к базовому каталогу для пользовательских site-packages. Может быть
None, еслиgetuserbase()ещё не был вызван. Значение по умолчанию –~/.localдля сборок UNIX и Mac OS X без фреймворка,~/Library/Python/X.Yдля сборок Mac с фреймворком и%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. Если он ещё не инициализирован, эта функция также установит его с учётомPYTHONNOUSERSITEиUSER_BASE.Новое в версии 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 для каждого пользователя