Документация Python неофициальный перевод
Содержание страницы

32.11. compileall – Байт-компиляция библиотек Pythoncompileall – Byte-compile Python libraries

Исходный код: Lib/compileall.py


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

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

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

directory ...
file ...

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

-l

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

-f

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

-q

Не печатать список скомпилированных файлов. Если указан один раз, сообщения об ошибках все равно будут выводиться. Если указан дважды (-qq), весь вывод подавляется.

-d destdir

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

-x regex

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

-i list

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

-b

Записывает файлы байт-кода в их устаревшие расположения и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в расположения и имена согласно PEP 3147, что позволяет файлам байт-кода от нескольких версий Python сосуществовать.

-r

Управляет максимальным уровнем рекурсии для подкаталогов. Если этот параметр указан, то опция -l не принимается во внимание. python -m compileall <directory> -r 0 эквивалентно python -m compileall <directory> -l.

-j N

Используется N рабочих для компиляции файлов в указанном каталоге. Если используется 0, то будет использован результат os.cpu_count().

Изменено в версии 3.2: Добавлены опции -i, -b и -h.

Изменено в версии 3.5: Добавлены опции -j, -r и -qq. Опция -q была изменена на многоуровневое значение. -b всегда будет создавать файл байт-кода с расширением .pyc, а не .pyo.

Не существует опции командной строки для управления уровнем оптимизации, используемым функцией compile(), поскольку сам интерпретатор Python уже предоставляет такую возможность: python -O -m compileall.

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

compileall.compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1)

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

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

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

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

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

Если quiet равен False или 0 (по умолчанию), имена файлов и другая информация выводятся в стандартный поток вывода. При значении 1 выводятся только ошибки. При значении 2 весь вывод подавляется.

Если legacy истинен, файлы байт-кода записываются в их устаревшие расположения и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в их расположения и имена PEP 3147, что позволяет файлам байт-кода от разных версий Python сосуществовать.

optimize задаёт уровень оптимизации для компилятора. Он передаётся встроенной функции compile().

Аргумент workers указывает, сколько рабочих процессов используется для параллельной компиляции файлов. По умолчанию несколько рабочих процессов не используются. Если платформа не поддерживает несколько рабочих процессов и указан аргумент workers, то в качестве запасного варианта будет использоваться последовательная компиляция. Если workers меньше 0, будет возбуждено ValueError.

Изменено в версии 3.2: Добавлены параметры legacy и optimize.

Изменено в версии 3.5: Добавлен параметр workers.

Изменено в версии 3.5: Параметр quiet изменён на многоуровневое значение.

Изменено в версии 3.5: Параметр legacy записывает только файлы .pyc, а не .pyo независимо от значения optimize.

Изменено в версии 3.6: Принимает объект, подобный пути.

compileall.compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1)

Компилирует файл с путём fullname. Возвращает истинное значение, если файл скомпилирован успешно, и ложное значение в противном случае.

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

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

Если quiet равен False или 0 (по умолчанию), имена файлов и другая информация выводятся в стандартный поток вывода. При значении 1 выводятся только ошибки. При значении 2 весь вывод подавляется.

Если legacy истинен, файлы байт-кода записываются в их устаревшие расположения и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в их расположения и имена PEP 3147, что позволяет файлам байт-кода от разных версий Python сосуществовать.

optimize задаёт уровень оптимизации для компилятора. Он передаётся встроенной функции compile().

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

Изменено в версии 3.5: Параметр quiet изменён на многоуровневое значение.

Изменено в версии 3.5: Параметр legacy записывает только файлы .pyc, а не .pyo независимо от значения optimize.

compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1)

Байт-компилирует все файлы .py, найденные вдоль sys.path. Возвращает истинное значение, если все файлы скомпилированы успешно, и ложное значение в противном случае.

Если skip_curdir истинен (по умолчанию), текущий каталог не включается в поиск. Все остальные параметры передаются функции compile_dir(). Обратите внимание, что в отличие от других функций компиляции, maxlevels по умолчанию равен 0.

Изменено в версии 3.2: Добавлены параметры legacy и optimize.

Изменено в версии 3.5: Параметр quiet изменён на многоуровневое значение.

Изменено в версии 3.5: Параметр legacy записывает только файлы .pyc, а не .pyo независимо от значения optimize.

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

import compileall

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

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

# Объекты pathlib.Path также можно использовать.
import pathlib
compileall.compile_dir(pathlib.Path('Lib/'), force=True)

См. также

Модуль py_compile

Байт-компилирует один исходный файл.