site
— Настройка для конкретного сайта¶
Исходный код: Lib/site.py
Этот модуль автоматически импортируется во время инициализации. Автоматический импорт может быть отключен с помощью опции -S
в интерпретаторе.
Импорт этого модуля добавит пути, относящиеся к конкретному сайту, к пути поиска модуля и добавит несколько зданий, если только не было использовано значение -S
. В этом случае этот модуль может быть безопасно импортирован без автоматического изменения пути поиска модуля или добавления встроенных элементов. Чтобы явно запустить обычные добавления, зависящие от конкретного сайта, вызовите функцию 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, а также проверяется наличие пакетов сайта (sys.base_prefix и sys.base_exec_prefix всегда будут «настоящими» префиксами при установке Python). Если «pyvenv.cfg» (файл конфигурации начальной загрузки) содержит ключ «include-system-site-packages», для которого установлено значение, отличное от «true» (без учета регистра), поиск пакетов сайта на системном уровне не будет выполняться; в противном случае он будет выполняться.
Файл конфигурации path - это файл, имя которого имеет вид 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
опущен, поскольку он не упоминается ни в одном из файлов конфигурации path.
sitecustomize
¶
После этих манипуляций с путями будет предпринята попытка импортировать модуль с именем sitecustomize
, который может выполнять произвольные настройки для конкретного сайта. Обычно он создается системным администратором в каталоге site-packages. Если этот импорт завершается ошибкой с исключением ImportError
или его подкласса, а атрибут исключения name
равен 'sitecustomize'
, он автоматически игнорируется. Если Python запускается без доступных потоков вывода, как в случае с pythonw.exe
в Windows (который по умолчанию используется для запуска IDLE), попытка вывода из sitecustomize
игнорируется. Любое другое исключение приводит к молчаливому и, возможно, загадочному сбою процесса.
usercustomize
¶
После этого предпринимается попытка импортировать модуль с именем usercustomize
, который может выполнять произвольные пользовательские настройки, если значение ENABLE_USER_SITE
равно true. Этот файл предназначен для создания в каталоге user site-packages (см. ниже), который является частью sys.path
, если он не отключен по -s
. Если этот импорт завершается ошибкой с исключением ImportError
или его подкласса, а атрибут исключения name
равен 'usercustomize'
, он автоматически игнорируется.
Обратите внимание, что в некоторых системах, отличных от Unix, sys.prefix
и sys.exec_prefix
являются пустыми, и манипуляции с путями пропускаются; однако импорт sitecustomize
и usercustomize
все еще выполняется.
Конфигурация строки чтения¶
В системах, поддерживающих readline
, этот модуль также импортирует и настраивает модуль rlcompleter
, если Python запущен в interactive mode и без опции -S
. По умолчанию используется включение завершения работы с вкладками и использование ~/.python_history
в качестве файла сохранения истории. Чтобы отключить его, удалите (или переопределите) атрибут sys.__interactivehook__
в вашем модуле sitecustomize
или usercustomize
или в вашем файле PYTHONSTARTUP
.
Изменено в версии 3.4: Активация rlcompleter и history была произведена автоматически.
Содержимое модуля¶
- site.PREFIXES¶
Список префиксов для каталогов пакетов сайтов.
- site.ENABLE_USER_SITE¶
Флаг, показывающий статус каталога пользовательских сайтов-пакетов.
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 framework и%APPDATA%\Python\PythonXY\site-packages
для Windows. Этот каталог является каталогом сайта, что означает, что.pth
файлов в нем будут обработаны.
- site.USER_BASE¶
Путь к базовому каталогу для пользовательского сайта-пакеты. Может быть
None
, еслиgetuserbase()
еще не вызывался. Значением по умолчанию является~/.local
для сборок UNIX и macOS, не относящихся к фреймворку,~/Library/Python/X.Y
для сборок macOS framework и%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()¶
Возвращает список, содержащий все глобальные каталоги пакетов сайтов.
Добавлено в версии 3.2.
- site.getuserbase()¶
Возвращает путь к пользовательскому каталогу,
USER_BASE
. Если он еще не инициализирован, эта функция также установит его, соблюдаяPYTHONUSERBASE
.Добавлено в версии 3.2.
- site.getusersitepackages()¶
Возвращает путь к каталогу пользовательских пакетов сайта,
USER_SITE
. Если он еще не инициализирован, эта функция также установит его, соблюдаяUSER_BASE
. Чтобы определить, был ли добавлен пользовательский сайт-пакеты для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¶
Выведите путь к каталогу пользовательского сайта-пакеты.
Если указаны оба варианта, то будут напечатаны база пользователей и сайт пользователя (всегда в таком порядке), разделенные символом os.pathsep
.
Если задан какой-либо параметр, скрипт завершит работу с одним из следующих значений: 0
если включен каталог пользовательских сайтов-пакетов, 1
если он был отключен пользователем, 2
если он отключен для по соображениям безопасности или по вине администратора, а также значение, превышающее 2, в случае возникновения ошибки.
См.также
PEP 370 – Для каждого сайта пользователя-каталог пакетов
Инициализация пути поиска модуля sys.path – Инициализация
sys.path
.