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 на основе хэшей. Hash-based 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.
Публичные функции
-
compileall.compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1, invalidation_mode=py_compile.PycInvalidationMode.TIMESTAMP) -
Рекурсивно спускается по дереву каталогов, заданному dir, компилируя все
.pyфайлы по пути. Возвращает True, если все файлы были успешно скомпилированы, и False в противном случае.Параметр 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.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.
-
compileall.compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, invalidation_mode=py_compile.PycInvalidationMode.TIMESTAMP) -
Компилирует файл с путем fullname. Возвращает значение true, если файл был успешно скомпилирован, и false в противном случае.
Если задан ddir, он добавляется в начало пути к файлу, который компилируется для использования во время отладки, а также компилируется в файл байткода, где он будет использоваться в отладке и других сообщениях в тех случаях, когда исходный файл не существует во время выполнения файла байткода.
Если задан rx, его метод поиска передаёт полное имя файла, который компилируется, и если он возвращает значение true, файл не компилируется и
Trueвозвращается.Если quiet имеет значение
Falseили0(по умолчанию), имена файлов и другая информация выводятся на стандартный вывод. Если установлено значение1, выводятся только ошибки. Если установлено значение2, весь вывод подавляется.Если legacy имеет значение true, файлы байткода записываются в устаревшие места и имена, что может перезаписать файлы байткода, созданные другой версией Python. По умолчанию файлы записываются в места и с именами согласно PEP 3147, что позволяет файлам байткода из нескольких версий Python сосуществовать.
optimize задаёт уровень оптимизации для компилятора. Он передаётся встроенной функции
compile().invalidation_mode должен быть членом перечисления
py_compile.PycInvalidationModeи управляет тем, как сгенерированные pycs аннулируются во время выполнения.Новое в версии 3.2.
Изменено в версии 3.5: Параметр quiet был изменён на многоуровневое значение.
Изменено в версии 3.5: Параметр legacy записывает только файлы
.pyc, а не файлы.pyo, независимо от значения optimize.Изменено в версии 3.7: Параметр invalidation_mode был добавлен.
-
compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1, invalidation_mode=py_compile.PycInvalidationMode.TIMESTAMP) -
Компилирует все
.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 был добавлен.
Чтобы принудительно перекомпилировать все .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)
# pathlib.Path objects can also be used.
import pathlib
compileall.compile_dir(pathlib.Path('Lib/'), force=True)
См. также
-
Modulepy_compile -
Компиляция одного исходного файла.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/compileall.html