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

---

# 30.11. `compileall` – компиляция библиотек Python в байт-код

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

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

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

#### `[directory|file]...`

Позиционные аргументы – это файлы для компиляции или каталоги, содержащие исходные файлы, обход выполняется рекурсивно. Если аргументы не указаны, поведение будет таким, как если бы командная строка была

`-l <directories from sys.path>`

.

#### `-l`

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

#### `-f`

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

#### `-q`

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

#### `-ddestdir`

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

#### `-xregex`

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

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

#### `compileall.compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=False)`

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

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

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

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

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

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

#### `compileall.compile_path(skip_curdir=True, maxlevels=0, force=False)`

Выполняет байт-компиляцию всех файлов

`.py`

, найденных вдоль

`sys.path`

. Если

*skip\_curdir*

равен true (по умолчанию), текущий каталог не включается в поиск. Все остальные параметры передаются функции

[`compile_dir()`](https://python-all.ru/3.1/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('/[.]svn'), force=True)
```

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