> **Источник:** https://python-all.ru/3.4/library/site.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 29.13. [`site`](https://python-all.ru/3.4/library/site.html#module-site) – Перехватчик конфигурации для конкретного сайта

**Исходный код:** [Lib/site.py](https://python-all.ru/src/3.4/Lib/site.py)

---

**Этот модуль автоматически импортируется при инициализации.** Автоматический импорт можно подавить с помощью флага интерпретатора [*-S*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-S).

Если не использовался флаг [*-S*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-S), импорт этого модуля добавляет специфичные для сайта пути в список поиска модулей и несколько встроенных объектов. В противном случае модуль можно безопасно импортировать без автоматических изменений пути поиска модулей или дополнений встроенных объектов. Чтобы явно запустить обычные добавления для сайта, вызовите функцию [`site.main()`](https://python-all.ru/3.4/library/site.html#site.main).

Изменено в версии 3.3: Раньше импорт модуля вызывал манипуляции с путями даже при использовании [*-S*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-S).

Сначала создаются до четырёх каталогов из головной и хвостовой частей. В качестве головной части используются `sys.prefix` и `sys.exec_prefix`; пустые головные части пропускаются. В качестве хвостовой части используется пустая строка, затем `lib/site-packages` (в Windows) или `lib/pythonX.Y/site-packages`, а затем `lib/site-python` (в Unix и Macintosh). Для каждой уникальной комбинации головной и хвостовой частей проверяется, указывает ли она на существующий каталог; если да, он добавляется в `sys.path`, и также проверяется добавленный путь на наличие файлов конфигурации.

Устарело с версии 3.4: Поддержка каталога «site-python» будет удалена в версии 3.5.

Если на один каталог выше 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` содержит следующее:

```text
# foo package configuration

foo
bar
bletch
```

а `bar.pth` содержит:

```text
# bar package configuration

bar
```

Тогда в `sys.path` добавляются следующие специфические для версии каталоги (в указанном порядке):

```text
/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`](https://python-all.ru/3.4/library/exceptions.html#ImportError), оно молча игнорируется. Если Python запущен без доступных выходных потоков, как в случае с `pythonw.exe` в Windows (который используется по умолчанию для запуска IDLE), попытка вывода из `sitecustomize` игнорируется. Любое исключение, отличное от [`ImportError`](https://python-all.ru/3.4/library/exceptions.html#ImportError), приводит к молчаливому и, возможно, загадочному сбою процесса.

После этого предпринимается попытка импортировать модуль с именем `usercustomize`, который может выполнять произвольные пользовательские настройки, если [`ENABLE_USER_SITE`](https://python-all.ru/3.4/library/site.html#site.ENABLE_USER_SITE) истинно. Этот файл предназначен для создания в каталоге пользовательских site-packages (см. ниже), который является частью `sys.path`, если не отключён флагом [*-s*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-s). Исключение [`ImportError`](https://python-all.ru/3.4/library/exceptions.html#ImportError) будет молча проигнорировано.

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

## 29.13.1. Конфигурация Readline

В системах, поддерживающих [`readline`](https://python-all.ru/3.4/library/readline.html#module-readline), этот модуль также импортирует и настраивает модуль [`rlcompleter`](https://python-all.ru/3.4/library/rlcompleter.html#module-rlcompleter), если Python запущен в [*интерактивном режиме*](https://python-all.ru/3.4/tutorial/interpreter.html#tut-interactive) и без флага [*-S*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-S). Поведение по умолчанию включает автодополнение по табуляции и использует файл `~/.python_history` для сохранения истории. Чтобы отключить это, удалите (или переопределите) атрибут [`sys.__interactivehook__`](https://python-all.ru/3.4/library/sys.html#sys.__interactivehook__) в вашем модуле `sitecustomize` или `usercustomize`, или в файле [`PYTHONSTARTUP`](https://python-all.ru/3.4/using/cmdline.html#envvar-PYTHONSTARTUP).

Изменено в версии 3.4: Активация rlcompleter и истории стала автоматической.

## 29.13.2. Содержимое модуля

#### `site.PREFIXES`

Список префиксов для каталогов site-packages.

#### `site.ENABLE_USER_SITE`

Флаг, показывающий статус пользовательского каталога site-packages. Значение `True` означает, что он включён и добавлен в `sys.path`. `False` означает, что он был отключён по запросу пользователя (с помощью [*-s*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-s) или [`PYTHONNOUSERSITE`](https://python-all.ru/3.4/using/cmdline.html#envvar-PYTHONNOUSERSITE)). `None` означает, что он был отключён по соображениям безопасности (несовпадение идентификатора пользователя или группы с эффективным идентификатором) или администратором.

#### `site.USER_SITE`

Путь к пользовательским site-packages для запущенного Python. Может быть равен `None`, если [`getusersitepackages()`](https://python-all.ru/3.4/library/site.html#site.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()`](https://python-all.ru/3.4/library/site.html#site.getuserbase) ещё не вызывалась. Значение по умолчанию: `~/.local` для UNIX и сборок Mac OS X без фреймворка, `~/Library/Python/X.Y` для сборок Mac с фреймворком, и `%APPDATA%\Python` для Windows. Это значение используется Distutils для вычисления каталогов установки скриптов, файлов данных, модулей Python и т.д. для схемы [*пользовательской установки*](https://python-all.ru/3.4/install/index.html#inst-alt-install-user). См. также [`PYTHONUSERBASE`](https://python-all.ru/3.4/using/cmdline.html#envvar-PYTHONUSERBASE).

#### `site.main()`

Добавляет все стандартные каталоги, специфичные для сайта, в путь поиска модулей. Эта функция вызывается автоматически при импорте этого модуля, если интерпретатор Python не был запущен с флагом [*-S*](https://python-all.ru/3.4/using/cmdline.html#cmdoption-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`](https://python-all.ru/3.4/library/site.html#site.USER_BASE). Если он ещё не инициализирован, эта функция также установит его, учитывая [`PYTHONUSERBASE`](https://python-all.ru/3.4/using/cmdline.html#envvar-PYTHONUSERBASE).

Новое в версии 3.2.

#### `site.getusersitepackages()`

Return the path of the user-specific site-packages directory, [`USER_SITE`](https://python-all.ru/3.4/library/site.html#site.USER_SITE). If it is not initialized yet, this function will also set it, respecting [`PYTHONNOUSERSITE`](https://python-all.ru/3.4/using/cmdline.html#envvar-PYTHONNOUSERSITE) and [`USER_BASE`](https://python-all.ru/3.4/library/site.html#site.USER_BASE).

Новое в версии 3.2.

The [`site`](https://python-all.ru/3.4/library/site.html#module-site) module also provides a way to get the user directories from the command line:

```sh
$ python3 -m site --user-site
/home/user/.local/lib/python3.3/site-packages
```

If it is called without arguments, it will print the contents of [`sys.path`](https://python-all.ru/3.4/library/sys.html#sys.path) on the standard output, followed by the value of [`USER_BASE`](https://python-all.ru/3.4/library/site.html#site.USER_BASE) and whether the directory exists, then the same thing for [`USER_SITE`](https://python-all.ru/3.4/library/site.html#site.USER_SITE), and finally the value of [`ENABLE_USER_SITE`](https://python-all.ru/3.4/library/site.html#site.ENABLE_USER_SITE).

#### `--user-base`

Выводит путь к базовому каталогу пользователя.

#### `--user-site`

Выводит путь к каталогу site-packages пользователя.

If both options are given, user base and user site will be printed (always in this order), separated by [`os.pathsep`](https://python-all.ru/3.4/library/os.html#os.pathsep).

If any option is given, the script will exit with one of these values: `O` if the user site-packages directory is enabled, `1` if it was disabled by the user, `2` if it is disabled for security reasons or by an administrator, and a value greater than 2 if there is an error.

> **См. также**
>
> [**PEP 370**](https://python-all.ru/3.4/library/site.html) – Каталог site-packages для каждого пользователя
