Модуль site
автоматически импортируется во время инициализации. Автоматический импорт можно подавить с помощью опции интерпретатора -S
.
Импорт модуля site
добавит специфичные для сайта (программы) пути, к путям поиска модулей и добавляет несколько встроенных имен, если только не был использован параметр командной строки -S
. В этом случае этот модуль можно безопасно импортировать без каких-либо автоматических изменений пути поиска модуля или дополнений к встроенным элементам. Чтобы явно вызвать обычные дополнения для конкретного сайта (программы), вызовите функцию site.main()
.
Изменено в Python 3.3: Импорт модуля, используемого для запуска манипуляций с путями, даже при использовании -S
.
Работа модуля site
начинается с создания до четырех каталогов из головной и хвостовой частей. В головной части используются sys.prefix
и sys.exec_prefix
, пустые значения пропускаются. Для хвостовой части используется пустая строка, а затем lib/site-packages
(в Windows) или lib/pythonX.Y/site-packages
(в Unix и Macintosh). Для каждой из различных комбинаций заголовок-хвост модуль проверяет, ссылается ли он на существующий каталог, и если да, то добавляет его в sys.path
, а также проверяет вновь добавленный путь для файлов конфигурации.
Изменено в Python 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
(без учета регистра), то префиксы системного уровня не будут искать site-packages
.
Файл конфигурации пути - это файл, имя которого имеет форму name.pth
и существует в одном из четырех каталогов, названных выше. Его содержимое - это дополнительные элементы (по одному в каждой строке), которые нужно добавить в sys.path
. Несуществующие элементы никогда не добавляются в sys.path
, а так же не проверяется, ссылается ли элемент на каталог, а не на файл. Ни один элемент не добавляется в sys.path
более одного раза. Пустые строки и строки, начинающиеся с символа #
, пропускаются. Строки, начинающиеся с импорта import
за которыми следует пробел или табуляция - выполняются.
Примечание. Исполняемая строка в файле .pth
запускается при каждом запуске Python, независимо от того, будет ли фактически использоваться конкретный модуль. Таким образом, его воздействие следует свести к минимуму. Основное предназначение исполняемых строк - сделать соответствующие модули импортируемыми (загрузить сторонние обработчики импорта, настроить PATH
и т. д.). Любая другая инициализация должна выполняться после фактического импорта модуля, если и когда это произойдет. Ограничение фрагмента кода одной строкой - это намеренная мера, чтобы не допустить добавления здесь чего-либо более сложного.
readline
.В системах, поддерживающих модуль readline
, модуль site
также будет импортировать и настраивать модуль rlcompleter
, если Python запущен в интерактивном режиме и без опции -S
. Поведение по умолчанию - включить завершение табуляции и использовать /.python_history
в качестве файла сохранения истории. Чтобы отключить его, удалите или переопределите атрибут sys.__interactivehook__
в вашем модуле sitecustomize
или usercustomize
или в файле PYTHONSTARTUP
.
site
.Предположим, что атрибуты 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
, который может выполнять произвольные настройки для конкретной сайта (программы). Обычно он создается системным администратором в каталоге пакетов сайта (программы). Если этот импорт завершается неудачно из-за ImportError
или исключения его подкласса, а атрибут имени исключения равен 'sitecustomize'
, то он автоматически игнорируется. Если Python запускается без доступных потоков вывода, как в случае с pythonw.exe
в Windows (который по умолчанию используется для запуска IDLE), то попытки вывода из sitecustomize
игнорируются. Любое другое исключение вызывает тихий и, возможно, загадочный сбой процесса.
После этого делается попытка импортировать модуль с именем usercustomize
, который может выполнять произвольные пользовательские настройки, если ENABLE_USER_SITE
истинно. Файл с именем usercustomize
предназначен для создания в каталоге пользовательских пакетов сайта, который является частью sys.path
, если не отключен параметром -s
. Если этот импорт завершается неудачно из-за ImportError
или исключения его подкласса, а атрибут имени исключения равен 'usercustomize'
, он автоматически игнорируется.
Обратите внимание, что для некоторых систем, отличных от Unix, sys.prefix
и sys.exec_prefix
пусты и манипуляции с путями пропускаются. Но попытки импорта sitecustomize
и usercustomize
все еще предпринимаются.