Документация Python неофициальный перевод

28.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, а затем lib/site-python (в Unix и Macintosh). Для каждой уникальной комбинации головной и хвостовой частей проверяется, указывает ли она на существующий каталог; если да, он добавляется в sys.path, и также проверяется добавленный путь на наличие файлов конфигурации.

Если на один каталог выше sys.executable существует файл с именем «pyvenv.cfg», то sys.prefix и sys.exec_prefix устанавливаются в этот каталог, и он также проверяется на наличие site-packages и site-python (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, это бесшумно игнорируется.

После этого предпринимается попытка импортировать модуль с именем usercustomize, который может выполнять произвольные пользовательские настройки, если ENABLE_USER_SITE истинно. Этот файл предназначен для создания в каталоге пользовательских site-packages (см. ниже), который является частью sys.path, если не отключён флагом -s. Исключение ImportError будет молча проигнорировано.

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

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 (и, возможно, site-python).

Новое в версии 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.

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

См. также

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