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

---

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

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

---

**Этот модуль автоматически импортируется при инициализации.** Автоматический импорт можно подавить с помощью флага интерпретатора [*-S*](https://python-all.ru/3.2/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`, и также проверяется добавленный путь на наличие файлов конфигурации.

Файл конфигурации пути – это файл, имя которого имеет форму `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.2/library/exceptions.html#ImportError), это бесшумно игнорируется.

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

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

#### `site.PREFIXES`

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

#### `site.ENABLE_USER_SITE`

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

#### `site.USER_SITE`

Путь к пользовательским site-packages для запущенного Python. Может быть равен `None`, если [`getusersitepackages()`](https://python-all.ru/3.2/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.2/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.2/install/index.html#inst-alt-install-user). См. также [`PYTHONUSERBASE`](https://python-all.ru/3.2/using/cmdline.html#envvar-PYTHONUSERBASE).

#### `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.2/library/site.html#site.USER_BASE). Если он ещё не инициализирован, эта функция также установит его, учитывая [`PYTHONUSERBASE`](https://python-all.ru/3.2/using/cmdline.html#envvar-PYTHONUSERBASE).

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

#### `site.getusersitepackages()`

Возвращает путь к каталогу site-packages, специфичному для пользователя, [`USER_SITE`](https://python-all.ru/3.2/library/site.html#site.USER_SITE). Если он ещё не инициализирован, эта функция также устанавливает его, учитывая [`PYTHONNOUSERSITE`](https://python-all.ru/3.2/using/cmdline.html#envvar-PYTHONNOUSERSITE) и [`USER_BASE`](https://python-all.ru/3.2/library/site.html#site.USER_BASE).

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

Модуль [`site`](https://python-all.ru/3.2/library/site.html#module-site) также предоставляет способ получить пользовательские каталоги из командной строки:

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

Если он вызывается без аргументов, он выводит содержимое [`sys.path`](https://python-all.ru/3.2/library/sys.html#sys.path) на стандартный вывод, затем значение [`USER_BASE`](https://python-all.ru/3.2/library/site.html#site.USER_BASE) и существует ли этот каталог, затем то же самое для [`USER_SITE`](https://python-all.ru/3.2/library/site.html#site.USER_SITE), и наконец значение [`ENABLE_USER_SITE`](https://python-all.ru/3.2/library/site.html#site.ENABLE_USER_SITE).

#### `--user-base`

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

#### `--user-site`

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

Если указаны оба параметра, будут выведены базовый каталог пользователя и пользовательский каталог site-packages (всегда в этом порядке), разделённые [`os.pathsep`](https://python-all.ru/3.2/library/os.html#os.pathsep).

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

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