Документация 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

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

-d destdir

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

-x regex

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

-i list

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

Изменено в версии 2.7: Добавлена опция -i.

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

compileall.compile_dir(dir[, maxlevels[, ddir[, force[, rx[, quiet]]]]])

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

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

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

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

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

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

compileall.compile_file(fullname[, ddir[, force[, rx[, quiet]]]])

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

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

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

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

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

compileall.compile_path([skip_curdir[, maxlevels[, force]]])

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

Чтобы принудительно перекомпилировать все файлы .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

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