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

---

# 32.11. [`compileall`](https://python-all.ru/2.7/library/compileall.html#module-compileall) – Байт-компиляция библиотек Python

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

---

Этот модуль предоставляет несколько утилитных функций для поддержки установки библиотек Python. Эти функции компилируют исходные файлы Python в дереве каталогов. Модуль можно использовать для создания кэшированных файлов байт-кода во время установки библиотеки, что делает их доступными для использования даже пользователями, у которых нет прав на запись в библиотечные каталоги.

## 32.11.1. Использование командной строки

Этот модуль может работать как скрипт (используя **python -m compileall**) для компиляции исходников Python.

#### `directory ...`

#### `file ...`

Позиционные аргументы – это файлы для компиляции или каталоги, содержащие исходные файлы, которые обходятся рекурсивно. Если аргументы не указаны, поведение эквивалентно командной строке `-l <directories from sys.path>`.

#### `-l`

Не рекурсивно обходить подкаталоги, а компилировать только исходные файлы, непосредственно содержащиеся в указанных или подразумеваемых каталогах.

#### `-f`

Принудительная пересборка, даже если метки времени актуальны.

#### `-q`

Не выводить список скомпилированных файлов, выводить только сообщения об ошибках.

#### `-d destdir`

Каталог, добавляемый в начало пути к каждому компилируемому файлу. Он будет отображаться в трассировках во время компиляции, а также будет встроен в файл байт-кода, где будет использоваться в трассировках и других сообщениях в случаях, когда исходный файл не существует на момент выполнения файла байт-кода.

#### `-x regex`

Регулярное выражение используется для поиска в полном пути каждого файла, рассматриваемого для компиляции, и если есть совпадение, файл пропускается.

#### `-i list`

Читает файл `list` и добавляет каждую строку из него в список файлов и каталогов для компиляции. Если `list` равно `-`, строки читаются из `stdin`.

Изменено в версии 2.7: Добавлена опция `-i`.

## 32.11.2. Публичные функции

#### `compileall.compile_dir(dir[, maxlevels[, ddir[, force[, rx[, quiet]]]]])`

Рекурсивно обходит дерево каталогов, заданное *dir*, компилируя все `.py` файлы по пути.

Параметр *maxlevels* используется для ограничения глубины рекурсии; по умолчанию он равен `10`.

Если указан параметр *ddir*, он добавляется в начало пути к каждому компилируемому файлу для использования в трассировках во время компиляции, а также компилируется в файл байт-кода, где будет использоваться в трассировках и других сообщениях в случаях, когда исходный файл не существует на момент выполнения файла байт-кода.

Если *force* равен true, модули перекомпилируются, даже если временные метки актуальны.

Если *rx* задан, его метод поиска вызывается для полного пути к каждому файлу, рассматриваемому для компиляции, и если он возвращает истинное значение, файл пропускается.

Если *quiet* равен true, в стандартный вывод ничего не выводится, за исключением сообщений об ошибках.

#### `compileall.compile_file(fullname[, ddir[, force[, rx[, quiet]]]])`

Компилирует файл с путём *fullname*.

Если указан *ddir*, он добавляется в начало пути к компилируемому файлу для использования в трассировках во время компиляции, а также встраивается в файл байт-кода, где будет использоваться в трассировках и других сообщениях в случаях, когда исходный файл не существует на момент выполнения файла байт-кода.

Если *rx* задан, его метод поиска получает полное имя пути к компилируемому файлу, и если он возвращает истинное значение, файл не компилируется и возвращается `True`.

Если *quiet* равен true, в стандартный вывод ничего не выводится, за исключением сообщений об ошибках.

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

#### `compileall.compile_path([skip_curdir[, maxlevels[, force]]])`

Байт-компилирует все `.py` файлы, найденные по пути `sys.path`. Если *skip\_curdir* равно True (по умолчанию), текущий каталог не включается в поиск. Все остальные параметры передаются [`compile_dir()`](https://python-all.ru/2.7/library/compileall.html#compileall.compile_dir) функции. Обратите внимание, что в отличие от других функций компиляции, `maxlevels` по умолчанию равен `0`.

Чтобы принудительно перекомпилировать все файлы `.py` в подкаталоге `Lib/` и всех его подкаталогах:

```python
import compileall

compileall.compile_dir('Lib/', force=True)

# Выполнить ту же компиляцию, исключая файлы в каталогах .svn.
import re
compileall.compile_dir('Lib/', rx=re.compile(r'[/\\][.]svn'), force=True)
```

> **См. также**
>
> **Модуль [`py_compile`](https://python-all.ru/2.7/library/py_compile.html#module-py_compile)**
>
> Байт-компилирует один исходный файл.
