Содержание страницы
30.11. compileall – компиляция библиотек Python в байт-код¶compileall – Byte-compile Python libraries
Этот модуль предоставляет несколько утилитных функций для поддержки установки библиотек Python. Эти функции компилируют исходные файлы Python в дереве каталогов. Модуль можно использовать для создания кэшированных файлов байт-кода во время установки библиотеки, что делает их доступными для использования даже пользователями, у которых нет прав на запись в библиотечные каталоги.
30.11.1. Использование командной строки¶Command-line use
Этот модуль может работать как скрипт (используя python -m compileall) для компиляции исходников Python.
- [directory|file]...
Позиционные аргументы – это файлы для компиляции или каталоги, содержащие исходные файлы, обход выполняется рекурсивно. Если аргументы не указаны, поведение будет таким, как если бы командная строка была -l <directories from sys.path>.
- -l¶
Не рекурсивно обходить подкаталоги, а компилировать только исходные файлы, непосредственно содержащиеся в указанных или подразумеваемых каталогах.
- -f¶
Принудительная пересборка, даже если метки времени актуальны.
- -q¶
Не выводить список скомпилированных файлов, выводить только сообщения об ошибках.
- -ddestdir¶
Каталог, добавляемый в начало пути к каждому компилируемому файлу. Он будет отображаться в трассировках во время компиляции, а также будет встроен в файл байт-кода, где будет использоваться в трассировках и других сообщениях в случаях, когда исходный файл не существует на момент выполнения файла байт-кода.
- -xregex¶
Регулярное выражение используется для поиска в полном пути каждого файла, рассматриваемого для компиляции, и если есть совпадение, файл пропускается.
- -ilist¶
Читает файл list и добавляет каждую строку из него в список файлов и каталогов для компиляции. Если list равен -, строки читаются из stdin.
- -b¶
Записывает файлы байт-кода в их устаревшие расположения и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в расположения и имена согласно PEP 3147, что позволяет файлам байт-кода от нескольких версий Python сосуществовать.
Изменено в версии 3.2: Добавлены опции -i, -b и -h.
Не существует параметра командной строки для управления уровнем оптимизации, используемого функцией compile(), поскольку сам интерпретатор Python уже предоставляет такую возможность: python -O -m compileall.
30.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('/[.]svn'), force=True)
См. также
- Модуль py_compile
- Байт-компилирует один исходный файл.