compileall
— байт-компиляции библиотеки Python¶
Исходный код: Lib/compileall.py
Модуль предоставляет полезные функции для поддержки установленных библиотек Python. Данные функции компилируют исходные Python файлы в дереве каталогов. Этот модуль может быть использован для создания кэширования байт-кода файлов во время установки библиотеки, которая делает их доступными для использования даже тем пользователям, которые не имеют разрешения на запись в каталоги библиотек.
Использование командной строки¶
Модуль может работать как скрипт (используя 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()
.
-
--invalidation-mode
[timestamp|checked-hash|unchecked-hash]
¶ Управление действительностью сгенерированного байт-код файла во время выполнения. Значение
timestamp
, означает, что в.pyc
файлы будет встраена информация об исходной временной метке и размере. Приchecked-hash
и значенииunchecked-hash
порождают генерацию pycs основанных на хэшах. В pycs файлах основанных на хэшах добавляются хэш сумма, а не временная метака, в содержимое исходного файла. См. Инвалидация кэша байткода для получения дополнительной информации о том, как Python проверяет хэши байт-код файлов во время выполнения. По умолчаниюtimestamp
если не определена переменная средыSOURCE_DATE_EPOCH
иchecked-hash
если переменная средыSOURCE_DATE_EPOCH
определена.
Изменено в версии 3.2: Добавлена -i
, -b
и -h
опция.
Изменено в версии 3.5: Добавлена -j
, -r
, и -qq
опция. Опция -q
была
изменен на многоуровневую значение. -b
всегда будет производить
байт-код файла, заканчивающийся в .pyc
, никогда не .pyo
.
Изменено в версии 3.7: Добавлена опция --invalidation-mode
.
Не существует опции командной строки для управления уровнем оптимизации, используемого
compile()
функцией, потому что интерпретатор Python сам предоставляет
опцию: python -O -m compileall.
Аналогично, функция compile()
отслеживает настройку sys.pycache_prefix
. Сгенерированный
байт-код кэш будет только тогда актуален, если compile()
запускается с той же
sys.pycache_prefix
(если таковые имеются), который будет использоваться во время
выполнения.
Общедоступные функции¶
-
compileall.
compile_dir
(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1, invalidation_mode=None)¶ Рекурсивный спуск по дереву каталогов с именем dir, компилируя все файлы
.py
по пути. Возвращает значение True, если все файлы успешно скомпилирован, и False в противном случае.Параметр maxlevels ограничивает глубину рекурсии; по умолчанию он
10
.Если указан ddir, он добавляется к пути каждого компилируемого файла000 для использования в трассировках во время компиляции, а также компилируется в файл байт-кода, где он будет использоваться в трассировках и других сообщениях в случаи, когда исходный файл не существует в то время, когда файл байт-кода выполняется.
Если force True, производится перекомпиляция модулей даже если метки находятся в актуальном состоянии.
Если rx определено, метод поиска вызывается по полному пути для каждого файла прочитанному для компиляции, и если он возвращает значение True, то файл пропускается.
Если quiet является
False
или0
(по умолчанию), имена и другие сведения печатаются в стандартный выход. Устанока1
, печатает только ошибки. Установка2
, приводит к подавлению всего выхода.Если legacy True, файлы c байт-кодом записываются на прежние места с именами, которые могут переписать байт-код файлов, созданные в другой версии Python. По умолчанию для записи файлов на их PEP 3147 места и имена, что позволяет байт-код файлов с различных версий Python сосуществовать.
optimize задает уровень оптимизации компилятора. Он передается встроенная функция
compile()
.Аргумент workers указывает, сколько работников используется для компиляции файлов параллельно. Значение по умолчанию не использовать несколько рабочих. Если платформа не может использовать несколько рабочих и аргумент workers, то последовательная компиляция будет используемый в качестве запасного варианта. Если workers 0, то их количество равно количеству используемых ядер в системе. Если workers меньше, чем
0
, то поднимаетсяValueError
.invalidation_mode должен быть членом
py_compile.PycInvalidationMode
перечисления и определяет, каким образом генерируемый pycs становятся инвалидируемым во время выполнения.Изменено в версии 3.2: Добавлен legacy и параметр optimize.
Изменено в версии 3.5: Добавлен параметр workers.
Изменено в версии 3.5: Параметр quiet был изменен на многоуровневую значение.
Изменено в версии 3.5: Параметр legacy только записывает файлы
.pyc
, не.pyo
файлы, вне зависимости от стоимости optimize это.Изменено в версии 3.6: Принимает путеподобный объект.
Изменено в версии 3.7: Параметр invalidation_mode была добавлена.
Изменено в версии 3.7.2: Значение параметра по умолчанию invalidation_mode обновляется нет.
Изменено в версии 3.8: Установка workers до 0 теперь выбирает оптимальное количество ядер.
-
compileall.
compile_file
(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, invalidation_mode=None)¶ Скомпилировать файл с путь fullname. Возвращает значение true, если файл успешно скомпилирован, и ложное значение в противном случае.
Если ddir дается, он добавляется к пути к файлу, который составлен для использования во время компиляции, прослеживания, а также скомпилированы в байт-код файл, где он будет используемый в прослеживания и другие сообщения в тех случаях, когда исходный файл не существует в время байт-код файл выполняется.
Если rx, ее поиск метод передается полный путь к файлу, который компилируется, и если она возвращает значение true, то файл не компилируется и
True
возвращается.Если quiet является
False
или0
(по умолчанию), имена и другие сведения печатаются в стандартный выход. Набор для1
, печатаются тОЛЬКО ошибки. Набор для2
, все выходные подавляется.Если legacy правда, байт-код файлы записываются на их наследие мест и имен, которые могут переписать байт-код файлы, созданные в другой версии Python. По умолчанию произодится запись файлов на их PEP 3147 места и имена, что позволяет совместно сосуществовать байт-кодам файлов с различными версиями Python.
optimize задает уровень оптимизации компилятора. Он передается встроенной функции
compile()
.Аргумент workers указывает, сколько работников используется для компиляции файлов параллельно. Значение по умолчанию не использовать несколько рабочих. Если платформа не может использовать несколько рабочих и аргумент workers, то последовательная компиляция будет используемый в качестве запасного варианта. Если workers 0, то их количество равно количеству используемых ядер в системе. Если workers меньше, чем
0
, то поднимаетсяValueError
.invalidation_mode должен быть членом
py_compile.PycInvalidationMode
перечисления и определяет, каким образом генерируемый pycs становятся инвалидируемым во время выполнения.Добавлено в версии 3.2.
Изменено в версии 3.5: Параметр quiet был изменён на многоуровневре значение.
Изменено в версии 3.5: Параметр legacy записывает только
.pyc
файлы, но не.pyo
, вне зависимости от значения optimize.Изменено в версии 3.7: Добавлен параметр invalidation_mode.
Изменено в версии 3.7.2: Значение параметра по умолчанию invalidation_mode обновлено до None.
-
compileall.
compile_path
(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1, invalidation_mode=None)¶ Байт-компиляции всех
.py
файлов найденых вsys.path
. Возвращает значение True, если все файлы успешно скомпилированы, и False значение в противном случае.Если skip_curdir имеет значение true (по умолчанию), то текущий каталог не входит в поиск. Все остальные параметры передаются в функцию
compile_dir()
. Обратите внимание, что в отличие от других функций компиляции,maxlevels
по умолчанию0
.Изменено в версии 3.2: Добавлен legacy и параметр optimize.
Изменено в версии 3.5: Параметр quiet был изменен на многоуровневое значение.
Изменено в версии 3.5: Параметр legacy записывает только
.pyc
файлы, но не.pyo
, вне зависимости от значения optimize.Изменено в версии 3.7: Добавлен параметр invalidation_mode.
Изменено в версии 3.7.2: Значение параметра по умолчанию invalidation_mode обновлено до None.
Пренудительная перекомпиляция всех файлов .py
в Lib/
каталоге и всех его
подкаталогах:
import compileall
compileall.compile_dir('Lib/', force=True)
# Выполнить ту же компиляцию, исключая файлы в каталогах .svn.
import re
compileall.compile_dir('Lib/', rx=re.compile(r'[/\\][.]svn'), force=True)
# pathlib.Объекты пути также могут быть использованы.
import pathlib
compileall.compile_dir(pathlib.Path('Lib/'), force=True)
См.также
- Модуль
py_compile
- Байтовая компиляция одиного исходного файла.