Содержание страницы
32.11. compileall – Байт-компиляция библиотек Python¶compileall – 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¶ Не выводить список скомпилированных файлов, выводить только сообщения об ошибках.
-
-ddestdir¶ Каталог, добавляемый в начало пути к каждому компилируемому файлу. Он будет отображаться в трассировках во время компиляции, а также будет встроен в файл байт-кода, где будет использоваться в трассировках и других сообщениях в случаях, когда исходный файл не существует на момент выполнения файла байт-кода.
-
-xregex¶ Регулярное выражение используется для поиска в полном пути каждого файла, рассматриваемого для компиляции, и если есть совпадение, файл пропускается.
-
-ilist¶ Читает файл
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 Байт-компилирует один исходный файл.