compileall.md
1> **Источник:** https://python-all.ru/3.3/library/compileall.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 31.11. [`compileall`](https://python-all.ru/3.3/library/compileall.html#module-compileall) – Байт-компиляция библиотек Python89Этот модуль предоставляет несколько утилитных функций для поддержки установки библиотек Python. Эти функции компилируют исходные файлы Python в дереве каталогов. Модуль можно использовать для создания кэшированных файлов байт-кода во время установки библиотеки, что делает их доступными для использования даже пользователями, у которых нет прав на запись в библиотечные каталоги.1011## 31.11.1. Использование командной строки1213Этот модуль может работать как скрипт (используя **python -m compileall**) для компиляции исходников Python.1415#### `[directory|file]...`1617Позиционные аргументы – это файлы для компиляции или каталоги, содержащие исходные файлы, обход выполняется рекурсивно. Если аргументы не указаны, поведение будет таким, как если бы командная строка была `-l <directories from sys.path>`.1819#### `-l`2021Не рекурсивно обходить подкаталоги, а компилировать только исходные файлы, непосредственно содержащиеся в указанных или подразумеваемых каталогах.2223#### `-f`2425Принудительная пересборка, даже если метки времени актуальны.2627#### `-q`2829Не выводить список скомпилированных файлов, выводить только сообщения об ошибках.3031#### `-d destdir`3233Каталог, добавляемый в начало пути к каждому компилируемому файлу. Он будет отображаться в трассировках во время компиляции, а также будет встроен в файл байт-кода, где будет использоваться в трассировках и других сообщениях в случаях, когда исходный файл не существует на момент выполнения файла байт-кода.3435#### `-x regex`3637Регулярное выражение используется для поиска в полном пути каждого файла, рассматриваемого для компиляции, и если есть совпадение, файл пропускается.3839#### `-i list`4041Читает файл `list` и добавляет каждую строку из него в список файлов и каталогов для компиляции. Если `list` равен `-`, строки читаются из `stdin`.4243#### `-b`4445Записывает файлы байт-кода в их устаревшие расположения и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в расположения и имена согласно [**PEP 3147**](https://python-all.ru/3.3/library/compileall.html), что позволяет файлам байт-кода от нескольких версий Python сосуществовать.4647Изменено в версии 3.2: Добавлены параметры `-i`, `-b` и `-h`.4849Не существует параметра командной строки для управления уровнем оптимизации, используемого функцией [`compile()`](https://python-all.ru/3.3/library/functions.html#compile), поскольку сам интерпретатор Python уже предоставляет такую возможность: **python -O -m compileall**.5051## 31.11.2. Публичные функции5253#### `compileall.compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=False, legacy=False, optimize=-1)`5455Рекурсивно обходит дерево каталогов с именем *dir*, компилируя все файлы `.py` по пути.5657Параметр *maxlevels* используется для ограничения глубины рекурсии; по умолчанию он равен `10`.5859Если указан параметр *ddir*, он добавляется в начало пути к каждому компилируемому файлу для использования в трассировках во время компиляции, а также компилируется в файл байт-кода, где будет использоваться в трассировках и других сообщениях в случаях, когда исходный файл не существует на момент выполнения файла байт-кода.6061Если *force* равен true, модули перекомпилируются, даже если временные метки актуальны.6263Если *rx* задан, его метод поиска вызывается для полного пути к каждому файлу, рассматриваемому для компиляции, и если он возвращает истинное значение, файл пропускается.6465Если *quiet* равен true, в стандартный вывод ничего не выводится, за исключением сообщений об ошибках.6667Если *legacy* истинен, файлы байт-кода записываются в их устаревшие расположения и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в их расположения и имена [**PEP 3147**](https://python-all.ru/3.3/library/compileall.html), что позволяет файлам байт-кода от разных версий Python сосуществовать.6869*optimize* задаёт уровень оптимизации для компилятора. Он передаётся встроенной функции [`compile()`](https://python-all.ru/3.3/library/functions.html#compile).7071Изменено в версии 3.2: Добавлены параметры *legacy* и *optimize*.7273#### `compileall.compile_file(fullname, ddir=None, force=False, rx=None, quiet=False, legacy=False, optimize=-1)`7475Компилирует файл с путём *fullname*.7677Если указан *ddir*, он добавляется в начало пути к компилируемому файлу для использования в трассировках во время компиляции, а также встраивается в файл байт-кода, где будет использоваться в трассировках и других сообщениях в случаях, когда исходный файл не существует на момент выполнения файла байт-кода.7879Если указан *rx*, его методу поиска передаётся полный путь к компилируемому файлу, и если он возвращает истинное значение, файл не компилируется и возвращается `True`.8081Если *quiet* равен true, в стандартный вывод ничего не выводится, за исключением сообщений об ошибках.8283Если *legacy* истинен, файлы байт-кода записываются в их устаревшие расположения и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в их расположения и имена [**PEP 3147**](https://python-all.ru/3.3/library/compileall.html), что позволяет файлам байт-кода от разных версий Python сосуществовать.8485*optimize* задаёт уровень оптимизации для компилятора. Он передаётся встроенной функции [`compile()`](https://python-all.ru/3.3/library/functions.html#compile).8687Новое в версии 3.2.8889#### `compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, legacy=False, optimize=-1)`9091Выполняет байт-компиляцию всех файлов `.py`, найденных вдоль `sys.path`. Если *skip\_curdir* равен true (по умолчанию), текущий каталог не включается в поиск. Все остальные параметры передаются функции [`compile_dir()`](https://python-all.ru/3.3/library/compileall.html#compileall.compile_dir). Обратите внимание: в отличие от других функций компиляции, `maxlevels` по умолчанию равен `0`.9293Изменено в версии 3.2: Добавлены параметры *legacy* и *optimize*.9495Чтобы принудительно перекомпилировать все файлы `.py` в подкаталоге `Lib/` и всех его подкаталогах:9697```python98import compileall99100compileall.compile_dir('Lib/', force=True)101102# Выполнить ту же компиляцию, исключая файлы в каталогах .svn.103import re104compileall.compile_dir('Lib/', rx=re.compile(r'[/\\][.]svn'), force=True)105```106107> **См. также**108>109> **Модуль [`py_compile`](https://python-all.ru/3.3/library/py_compile.html#module-py_compile)**110>111> Байт-компилирует один исходный файл.112