28.14. site – Хук конфигурации для конкретного сайта¶site – Site-specific configuration hook
Исходный код: Lib/site.py
Этот модуль автоматически импортируется при инициализации. Автоматический импорт можно отключить с помощью опции интерпретатора -S.
Импорт этого модуля добавляет пути для конкретного сайта в путь поиска модулей и добавляет несколько встроенных объектов.
Начинается с построения до четырёх каталогов из частей head и tail.
Для части head используются sys.prefix и sys.exec_prefix; пустые head пропускаются.
Для части tail используются пустая строка, а затем
lib/site-packages (в Windows) или
lib/pythonX.Y/site-packages, а затем lib/site-python (в
Unix и Macintosh). Для каждой уникальной комбинации head-tail проверяется,
указывает ли она на существующий каталог; если да, он добавляется в sys.path и
также проверяется вновь добавленный путь на наличие файлов конфигурации.
Файл конфигурации пути – это файл, имя которого имеет вид name.pth и находится в одном из четырёх упомянутых выше каталогов; его содержимое – это дополнительные элементы (по одному на строку), которые добавляются в sys.path. Несуществующие элементы никогда не добавляются в sys.path, и не проверяется, является ли элемент каталогом, а не файлом. Ни один элемент не добавляется в sys.path более одного раза. Пустые строки и строки, начинающиеся с #, пропускаются. Строки, начинающиеся с import (с последующим пробелом или табуляцией), выполняются.
Изменено в версии 2.6: После ключевого слова 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 всё равно предпринимается.
-
site.PREFIXES¶ Список префиксов для каталогов site-packages.
Новое в версии 2.6.
-
site.ENABLE_USER_SITE¶ Флаг, показывающий статус каталога пользовательских site-packages.
Trueозначает, что он включён и был добавлен вsys.path.Falseозначает, что он был отключён по запросу пользователя (с помощью-sилиPYTHONNOUSERSITE).Noneозначает, что он был отключён по соображениям безопасности (несовпадение идентификатора пользователя или группы с эффективным идентификатором) или администратором.Новое в версии 2.6.
-
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файлы в нём будут обработаны.Новое в версии 2.6.
-
site.USER_BASE¶ Путь к базовому каталогу для пользовательских site-packages. Может быть
None, еслиgetuserbase()ещё не был вызван. Значение по умолчанию –~/.localдля сборок UNIX и Mac OS X без фреймворка,~/Library/Python/X.Yдля сборок Mac с фреймворком и%APPDATA%\Pythonдля Windows. Это значение используется Distutils для вычисления каталогов установки скриптов, файлов данных, модулей Python и т.д. для схемы пользовательской установки. См. такжеPYTHONUSERBASE.Новое в версии 2.6.
-
site.addsitedir(sitedir, known_paths=None)¶ Добавляет каталог в sys.path и обрабатывает его
.pthфайлы. Обычно используется вsitecustomizeилиusercustomize(см. выше).
-
site.getsitepackages()¶ Возвращает список, содержащий все глобальные каталоги site-packages (и, возможно, site-python).
Новое в версии 2.7.
-
site.getuserbase()¶ Возвращает путь к базовому каталогу пользователя,
USER_BASE. Если он ещё не инициализирован, эта функция также устанавливает его с учётомPYTHONUSERBASE.Новое в версии 2.7.
-
site.getusersitepackages()¶ Возвращает путь к каталогу site-packages для текущего пользователя,
USER_SITE. Если он ещё не инициализирован, эта функция также установит его с учётомPYTHONNOUSERSITEиUSER_BASE.Новое в версии 2.7.
Модуль site также предоставляет способ получить каталоги пользователя из
командной строки:
$ python -m site --user-site
/home/user/.local/lib/python2.7/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 для каждого пользователя