compileall — Байткодирование библиотек Python
Исходный код: Lib/compileall.py
Этот модуль предоставляет некоторые служебные функции для поддержки установки библиотек Python. Эти функции компилируют файлы исходного кода Python в древовидной структуре директорий. Этот модуль может быть использован для создания кэшированных файлов байткода во время установки библиотек, что делает их доступными даже для пользователей, у которых нет прав записи в каталоги библиотек.
1. Использование в командной строке
Этот модуль может работать как скрипт (используя 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.
2. Общедоступные функции
-
compileall.compile_dir(dir[, maxlevels[, ddir[, force[, rx[, quiet]]]]]) -
Рекурсивно спускается по дереву каталогов, названному dir, компилируя все файлы
.pyпо пути.Параметр maxlevels используется для ограничения глубины рекурсии; по умолчанию он равен
10.Если задан ddir, он добавляется в начало пути к каждому компилируемому файлу для использования в трассировках во время компиляции, а также компилируется в файл байткода, где он используется в трассировках и других сообщениях в тех случаях, когда исходный файл не существует на момент выполнения файла байткода.
Если force равно true, модули перекомпилируются, даже если временные метки актуальны.
Если задан rx, его метод поиска вызывается для полного пути к каждому файлу, рассматриваемому для компиляции, и если он возвращает значение true, файл пропускается.
Если 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)
# Perform same compilation, excluding files in .svn directories.
import re
compileall.compile_dir('Lib/', rx=re.compile(r'[/\\][.]svn'), force=True)
См. также
-
Modulepy_compile -
Байткодирование одного исходного файла.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/compileall.html