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

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

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

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

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

[directory|file]...

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

-l

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

-f

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

-q

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

-d destdir

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

-x regex

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

-i list

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

-b

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Изменено в версии 3.2: Добавлены параметры legacy и 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)

См. также

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