Сообщить об ошибке.

Модуль site, перехватчик конфигурации Python

Перехватчик конфигурации для конкретной программы

Модуль 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 все еще предпринимаются.