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-пакетов (sys.base_prefix и sys.base_exec_prefix всегда будут «настоящими» префиксами установки Python). Если в «pyvenv.cfg» (конфигурационный файл загрузочной платформы) ключ «include-system-site-packages» имеет значение, отличное от «true» (без учета регистра), префиксы системного уровня не будут проверяться на наличие site-пакетов; в противном случае они будут проверяться.

Файл конфигурации пути - это файл, имя которого имеет вид 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 запущен в interactive mode и без опции -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

Путь к пользовательским сайт-пакетам для запущенного 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

Путь к базовому каталогу для пользовательских сайт-пакетов. Может быть None, если getuserbase() еще не был вызван. Значение по умолчанию ~/.local для UNIX и macOS без фреймворков, ~/Library/Python/X.Y для фреймворков macOS и %APPDATA%\Python для Windows. Это значение используется Distutils для вычисления директорий установки скриптов, файлов данных, модулей Python и т.д. для user installation scheme. См. также 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 пользователя.

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

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

См.также

PEP 370 – Каталог пакетов сайта для каждого пользователя

Вернуться на верх