compileall — Сборка байт-кода библиотек Python
Исходный код: Lib/compileall.py
Этот модуль предоставляет некоторые служебные функции для поддержки установки библиотек Python. Эти функции собирают файлы исходного кода Python в дереве каталогов. Этот модуль может использоваться для создания кэшированных файлов байт-кода во время установки библиотек, что делает их доступными даже для пользователей, у которых нет права записи в каталоги библиотек.
1. Использование в командной строке
Этот модуль может работать как скрипт (используя python -m compileall) для компиляции исходных кодов Python.
-
directory ... -
file ... -
Позиционные аргументы — это файлы для компиляции или каталоги, содержащие исходные файлы, которые обрабатываются рекурсивно. Если аргументов нет, то поведение эквивалентно запуску
-l <directories from sys.path>.
-
-l -
Не входить в подкаталоги, а только компилировать файлы исходного кода, непосредственно содержащиеся в указанных или подразумеваемых каталогах.
-
-f -
Принудительная перекомпиляция даже если метки времени совпадают.
-
-q -
Не выводить список скомпилированных файлов. Если указано один раз, сообщения об ошибках всё равно будут выводиться. Если указано дважды (
-qq), весь вывод будет подавлен.
-
-d destdir -
Каталог, добавляемый к пути к каждому компилируемому файлу. Он будет отображаться в отслеживании компиляции и также будет включен в файл байт-кода, где он будет использоваться в отслеживании и других сообщениях в тех случаях, когда исходный файл не существует на момент выполнения файла байт-кода.
-
-x regex -
Используется регулярное выражение для поиска полного пути каждого файла, рассматриваемого для компиляции. Если регулярное выражение находит соответствие, файл пропускается.
-
-i list -
Прочитать файл
listи добавить каждую строку, содержащуюся в нём, в список файлов и каталогов для компиляции. Еслиlistравно-, читать строки изstdin.
-
-b -
Записывать файлы байт-кода в их устаревшие места и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в места и с именами, соответствующими PEP 3147, что позволяет совместно использовать файлы байт-кода от нескольких версий Python.
-
-r -
Управление максимальным уровнем рекурсии для подкаталогов. Если этот параметр указан, то параметр
-lне будет учтён. python -m compileall <directory> -r 0 эквивалентно python -m compileall <directory> -l.
-
-j N -
Использовать N потоков для компиляции файлов в указанном каталоге. Если
0используется, то результатos.cpu_count()будет использован.
Изменено в версии 3.2: Добавлены параметры -i, -b и -h.
Изменено в версии 3.5: Добавлены параметры -j, -r, и -qq. Параметр -q был изменён на многоуровневое значение. -b всегда будет генерировать файл байт-кода, заканчивающийся на .pyc, а не на .pyo.
Нет параметра командной строки для управления уровнем оптимизации, используемым функцией compile(), так как сам интерпретатор Python уже предоставляет параметр: python -O -m compileall.
2. Публичные функции
-
compileall.compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1) -
Рекурсивно спускается по дереву каталогов, указанному параметром dir, компилируя все
.pyфайлы по пути.Параметр maxlevels используется для ограничения глубины рекурсии; по умолчанию он равен
10.Если задан параметр ddir, он добавляется к пути каждого компилируемого файла для использования в отладке компиляции и также включается в файл байт-кода, где он будет использоваться в отладке и других сообщениях в тех случаях, когда исходный файл не существует на момент выполнения файла байт-кода.
Если force имеет значение true, модули будут перекомпилированы, даже если метки времени соответствуют.
Если rx задан, его метод поиска вызывается с полным путем каждого файла, рассматриваемого для компиляции. Если он возвращает true, файл пропускается.
Если quiet равно
Falseили0(по умолчанию), имена файлов и другая информация выводятся в стандартный вывод. Установленное значение1— выводятся только сообщения об ошибках. Установленное значение2— весь вывод подавляется.Если legacy имеет значение true, файлы байт-кода записываются в устаревшие места и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в места и с именами, соответствующими PEP 3147, что позволяет совместно использовать файлы байт-кода от нескольких версий Python.
optimize указывает уровень оптимизации для компилятора. Он передаётся встроенной функции
compile().Аргумент workers задаёт количество потоков для параллельной компиляции файлов. По умолчанию не используется многопоточность. Если платформа не может использовать многопоточность, а аргумент workers задан, то используется последовательная компиляция.
Если workers меньше
0, генерируется исключениеValueError.Изменено в версии 3.2: Добавлены параметры legacy и optimize.
Изменено в версии 3.5: Добавлен параметр workers.
Изменено в версии 3.5: Параметр quiet был изменён на многоуровневое значение.
Изменено в версии 3.5: Параметр legacy записывает только файлы
.pyc, а не.pyo, независимо от значения optimize.
-
compileall.compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1) -
Компилирует файл с путём fullname.
Если ddir задан, он добавляется к пути компилируемого файла для использования в отслеживании компиляции и также включается в файл байт-кода, где он будет использоваться в отладке и других сообщениях в тех случаях, когда исходный файл не существует на момент выполнения файла байт-кода.
Если rx задан, его метод поиска вызывается с полным именем пути к компилируемому файлу. Если он возвращает true, файл не компилируется и возвращается
True.Если quiet равно
Falseили0(по умолчанию), имена файлов и другая информация выводятся в стандартный вывод. Установленное значение1— выводятся только сообщения об ошибках. Установленное значение2— весь вывод подавляется.Если legacy имеет значение true, файлы байт-кода записываются в устаревшие места и имена, что может перезаписать файлы байт-кода, созданные другой версией Python. По умолчанию файлы записываются в места и с именами, соответствующими PEP 3147, что позволяет совместно использовать файлы байт-кода от нескольких версий Python.
optimize указывает уровень оптимизации для компилятора. Он передаётся встроенной функции
compile().Добавлена в версии 3.2.
Изменено в версии 3.5: Параметр quiet был изменён на многоуровневое значение.
Изменено в версии 3.5: Параметр legacy записывает только файлы
.pyc, а не.pyo, независимо от значения optimize.
-
compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1) -
Сборка байт-кода всех
.pyфайлов, найденных поsys.path. Если skip_curdir имеет значение true (по умолчанию), текущий каталог не включается в поиск. Все остальные параметры передаются функцииcompile_dir(). Обратите внимание, что в отличие от других функций компиляции,maxlevelsпо умолчанию равно0.Изменено в версии 3.2: Добавлены параметры legacy и optimize.
Изменено в версии 3.5: Параметр quiet был изменён на многоуровневое значение.
Изменено в версии 3.5: Параметр legacy записывает только файлы
.pyc, а не.pyo, независимо от значения optimize.
Чтобы принудительно перекомпилировать все .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/3.5/library/compileall.html