compileall.md
1> **Источник:** https://python-all.ru/3.5/library/compileall.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 32.11. [`compileall`](https://python-all.ru/3.5/library/compileall.html#module-compileall) – Байт-компиляция библиотек Python89**Исходный код:** [Lib/compileall.py](https://python-all.ru/src/3.5/Lib/compileall.py)1011---1213Этот модуль предоставляет несколько утилитных функций для поддержки установки библиотек Python. Эти функции компилируют исходные файлы Python в дереве каталогов. Модуль можно использовать для создания кэшированных файлов байт-кода во время установки библиотеки, что делает их доступными для использования даже пользователями, у которых нет прав на запись в библиотечные каталоги.1415## 32.11.1. Использование командной строки1617Этот модуль может работать как скрипт (используя **python -m compileall**) для компиляции исходников Python.1819#### `directory ...`2021#### `file ...`2223Позиционные аргументы – это файлы для компиляции или каталоги, содержащие исходные файлы, которые обходятся рекурсивно. Если аргументы не указаны, поведение эквивалентно командной строке `-l <directories from sys.path>`.2425#### `-l`2627Не рекурсивно обходить подкаталоги, а компилировать только исходные файлы, непосредственно содержащиеся в указанных или подразумеваемых каталогах.2829#### `-f`3031Принудительная пересборка, даже если метки времени актуальны.3233#### `-q`3435Не печатать список скомпилированных файлов. Если указан один раз, сообщения об ошибках все равно будут выводиться. Если указан дважды (`-qq`), весь вывод подавляется.3637#### `-d destdir`3839Каталог, добавляемый в начало пути к каждому компилируемому файлу. Он будет отображаться в трассировках во время компиляции, а также будет встроен в файл байт-кода, где будет использоваться в трассировках и других сообщениях в случаях, когда исходный файл не существует на момент выполнения файла байт-кода.4041#### `-x regex`4243Регулярное выражение используется для поиска в полном пути каждого файла, рассматриваемого для компиляции, и если есть совпадение, файл пропускается.4445#### `-i list`4647Читает файл `list` и добавляет каждую строку из него в список файлов и каталогов для компиляции. Если `list` равно `-`, строки читаются из `stdin`.4849#### `-b`5051Записывает файлы байт-кода в их устаревшие расположения и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в расположения и имена согласно [**PEP 3147**](https://python-all.ru/3.5/library/compileall.html), что позволяет файлам байт-кода от нескольких версий Python сосуществовать.5253#### `-r`5455Управляет максимальным уровнем рекурсии для подкаталогов. Если этот параметр указан, то опция `-l` не принимается во внимание. **python -m compileall \<directory\> -r 0** эквивалентно **python -m compileall \<directory\> -l**.5657#### `-j N`5859Используется *N* рабочих для компиляции файлов в указанном каталоге. Если используется `0`, то будет использован результат [`os.cpu_count()`](https://python-all.ru/3.5/library/os.html#os.cpu_count).6061Изменено в версии 3.2: Добавлены опции `-i`, `-b` и `-h`.6263Изменено в версии 3.5: Добавлены опции `-j`, `-r` и `-qq`. Опция `-q` была изменена на многоуровневое значение. `-b` всегда будет создавать файл байт-кода с расширением `.pyc`, а не `.pyo`.6465Не существует опции командной строки для управления уровнем оптимизации, используемым функцией [`compile()`](https://python-all.ru/3.5/library/functions.html#compile), поскольку сам интерпретатор Python уже предоставляет такую возможность: **python -O -m compileall**.6667## 32.11.2. Публичные функции6869#### `compileall.compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1)`7071Рекурсивно обходит дерево каталогов, заданное *dir*, компилируя все `.py` файлы по пути.7273Параметр *maxlevels* используется для ограничения глубины рекурсии; по умолчанию он равен `10`.7475Если указан параметр *ddir*, он добавляется в начало пути к каждому компилируемому файлу для использования в трассировках во время компиляции, а также компилируется в файл байт-кода, где будет использоваться в трассировках и других сообщениях в случаях, когда исходный файл не существует на момент выполнения файла байт-кода.7677Если *force* равен true, модули перекомпилируются, даже если временные метки актуальны.7879Если *rx* задан, его метод поиска вызывается для полного пути к каждому файлу, рассматриваемому для компиляции, и если он возвращает истинное значение, файл пропускается.8081Если *quiet* равен `False` или `0` (по умолчанию), имена файлов и другая информация выводятся в стандартный поток вывода. При значении `1` выводятся только ошибки. При значении `2` весь вывод подавляется.8283Если *legacy* истинен, файлы байт-кода записываются в их устаревшие расположения и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в их расположения и имена [**PEP 3147**](https://python-all.ru/3.5/library/compileall.html), что позволяет файлам байт-кода от разных версий Python сосуществовать.8485*optimize* задаёт уровень оптимизации для компилятора. Он передаётся встроенной функции [`compile()`](https://python-all.ru/3.5/library/functions.html#compile).8687Аргумент *workers* указывает, сколько рабочих процессов используется для параллельной компиляции файлов. По умолчанию несколько рабочих процессов не используются. Если платформа не поддерживает несколько рабочих процессов и указан аргумент *workers*, то в качестве запасного варианта будет использоваться последовательная компиляция. Если *workers* меньше `0`, будет возбуждено [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError).8889Изменено в версии 3.2: Добавлены параметры *legacy* и *optimize*.9091Изменено в версии 3.5: Добавлен параметр *workers*.9293Изменено в версии 3.5: Параметр *quiet* изменён на многоуровневое значение.9495Изменено в версии 3.5: Параметр *legacy* записывает только файлы `.pyc`, а не `.pyo` независимо от значения *optimize*.9697#### `compileall.compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1)`9899Компилирует файл с путём *fullname*.100101Если указан *ddir*, он добавляется в начало пути к компилируемому файлу для использования в трассировках во время компиляции, а также встраивается в файл байт-кода, где будет использоваться в трассировках и других сообщениях в случаях, когда исходный файл не существует на момент выполнения файла байт-кода.102103Если *rx* задан, его метод поиска получает полное имя пути к компилируемому файлу, и если он возвращает истинное значение, файл не компилируется и возвращается `True`.104105Если *quiet* равен `False` или `0` (по умолчанию), имена файлов и другая информация выводятся в стандартный поток вывода. При значении `1` выводятся только ошибки. При значении `2` весь вывод подавляется.106107Если *legacy* истинен, файлы байт-кода записываются в их устаревшие расположения и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в их расположения и имена [**PEP 3147**](https://python-all.ru/3.5/library/compileall.html), что позволяет файлам байт-кода от разных версий Python сосуществовать.108109*optimize* задаёт уровень оптимизации для компилятора. Он передаётся встроенной функции [`compile()`](https://python-all.ru/3.5/library/functions.html#compile).110111Новое в версии 3.2.112113Изменено в версии 3.5: Параметр *quiet* изменён на многоуровневое значение.114115Изменено в версии 3.5: Параметр *legacy* записывает только файлы `.pyc`, а не `.pyo` независимо от значения *optimize*.116117#### `compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1)`118119Байт-компилирует все `.py` файлы, найденные по пути `sys.path`. Если *skip\_curdir* равно True (по умолчанию), текущий каталог не включается в поиск. Все остальные параметры передаются [`compile_dir()`](https://python-all.ru/3.5/library/compileall.html#compileall.compile_dir) функции. Обратите внимание, что в отличие от других функций компиляции, `maxlevels` по умолчанию равен `0`.120121Изменено в версии 3.2: Добавлены параметры *legacy* и *optimize*.122123Изменено в версии 3.5: Параметр *quiet* изменён на многоуровневое значение.124125Изменено в версии 3.5: Параметр *legacy* записывает только файлы `.pyc`, а не `.pyo` независимо от значения *optimize*.126127Чтобы принудительно перекомпилировать все файлы `.py` в подкаталоге `Lib/` и всех его подкаталогах:128129```python130import compileall131132compileall.compile_dir('Lib/', force=True)133134# Выполнить ту же компиляцию, исключая файлы в каталогах .svn.135import re136compileall.compile_dir('Lib/', rx=re.compile(r'[/\\][.]svn'), force=True)137```138139> **См. также**140>141> **Модуль [`py_compile`](https://python-all.ru/3.5/library/py_compile.html#module-py_compile)**142>143> Байт-компилирует один исходный файл.144