compileall — Библиотеки Python для байтовой компиляции

Исходный код: Lib/compileall.py


Этот модуль предоставляет некоторые служебные функции для поддержки установки библиотек Python. Эти функции компилируют исходные файлы Python в виде дерева каталогов. Этот модуль может быть использован для создания кэшированных файлов байт-кода во время установки библиотеки, что делает их доступными для использования даже пользователями, у которых нет прав на запись в каталоги библиотеки.

Availability: это не Emscripten, это был не я.

Этот модуль не работает или недоступен на платформах WebAssembly wasm32-emscripten и wasm32-wasi. Дополнительную информацию смотрите в разделе Платформы веб-сборки.

Использование командной строки

Этот модуль может работать как скрипт (используя python -m compileall) для компиляции исходных текстов на Python.

directory ...
file ...

Позиционные аргументы - это файлы для компиляции или каталоги, содержащие исходные файлы, которые обрабатываются рекурсивно. Если аргумент не указан, ведите себя так, как если бы в командной строке было -l <directories from sys.path>.

-l

Не выполняйте повторный поиск по подкаталогам, компилируйте только файлы исходного кода, непосредственно содержащиеся в именованных или подразумеваемых каталогах.

-f

Принудительная перестройка, даже если временные метки обновлены.

-q

Не печатайте список скомпилированных файлов. При однократной передаче сообщения об ошибках все равно будут выводиться. При повторной передаче (-qq), все выходные данные будут заблокированы.

-d destdir

Каталог, предшествующий пути к каждому компилируемому файлу. Это будет отображаться в обратных трассировках во время компиляции, а также компилироваться в файл байт-кода, где оно будет использоваться в обратных трассировках и других сообщениях в случаях, когда исходный файл не существует на момент выполнения файла байт-кода.

-s strip_prefix
-p prepend_prefix

Удалите (-s) или добавьте (-p) заданный префикс путей, записанных в файлах .pyc. Не может быть объединен с -d.

-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 приводят к генерации изображений на основе хэша. Выбор на основе хэша включает хэш содержимого исходного файла, а не временную метку. Смотрите Недействительность кэшированного байт-кода для получения дополнительной информации о том, как Python проверяет файлы кэша байт-кода во время выполнения. Значение по умолчанию равно timestamp, если не задана переменная окружения SOURCE_DATE_EPOCH, и checked-hash, если задана переменная окружения SOURCE_DATE_EPOCH.

-o level

Скомпилируйте с заданным уровнем оптимизации. Может использоваться несколько раз для одновременной компиляции для нескольких уровней (например, compileall -o 1 -o 2).

-e dir

Игнорируйте символические ссылки, указывающие за пределы данного каталога.

Если два файла .pyc с разным уровнем оптимизации содержат одинаковое содержимое, используйте жесткие ссылки для объединения повторяющихся файлов.

Изменено в версии 3.2: Добавлены опции -i, -b и -h.

Изменено в версии 3.5: Добавлены параметры -j, -r, и -qq. Параметр -q был изменен на многоуровневый. -b всегда будет создавать файл с байт-кодом, оканчивающийся на .pyc, и никогда на .pyo.

Изменено в версии 3.7: Добавлена опция --invalidation-mode.

Изменено в версии 3.9: Добавлены опции -s, -p, -e и --hardlink-dupes. Увеличено ограничение на рекурсию по умолчанию с 10 до sys.getrecursionlimit(). Добавлена возможность указывать параметр -o несколько раз.

В командной строке нет опции для управления уровнем оптимизации, используемым функцией compile(), поскольку сам интерпретатор Python уже предоставляет опцию: python -O -m compileall.

Аналогично, функция compile() соответствует параметру sys.pycache_prefix. Сгенерированный кэш байт-кода будет полезен только в том случае, если compile() запускается с тем же sys.pycache_prefix (если таковой имеется), который будет использоваться во время выполнения.

Государственные функции

compileall.compile_dir(dir, maxlevels=sys.getrecursionlimit(), ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1, invalidation_mode=None, *, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False)

Выполните рекурсивный спуск по дереву каталогов с именем dir, компилируя все файлы .py по пути. Верните значение true, если все файлы скомпилированы успешно, и значение false в противном случае.

Параметр maxlevels используется для ограничения глубины рекурсии; по умолчанию он равен sys.getrecursionlimit().

Если задан параметр ddir, то он добавляется перед путем к каждому файлу, который компилируется для использования в трассировках во время компиляции, а также компилируется в файл байт-кода, где он будет использоваться в трассировках и других сообщениях в случаях, когда исходный файл не существует на момент компиляции. выполняется файл с байт-кодом.

Если значение force равно true, модули перекомпилируются, даже если временные метки актуальны.

Если задано значение rx, то вызывается его метод search для полного пути к каждому файлу, рассматриваемому для компиляции, и если он возвращает значение true, файл пропускается. Это может быть использовано для исключения файлов, соответствующих регулярному выражению, заданному как объект re.Pattern.

Если значение quiet равно False или 0 (по умолчанию), имена файлов и другая информация выводятся в стандартном виде. Если значение 1, выводятся только ошибки. Установлено значение 2, все выходные данные отключены.

Если значение legacy равно true, файлы байт-кода записываются в их устаревшие местоположения и имена, что может привести к перезаписи файлов байт-кода, созданных другой версией Python. По умолчанию файлы записываются в их PEP 3147 расположение и имена, что позволяет файлам с байт-кодом из нескольких версий Python сосуществовать.

оптимизировать определяет уровень оптимизации для компилятора. Он передается встроенной функции compile(). Также принимает последовательность уровней оптимизации, которые приводят к многократной компиляции одного файла .py за один вызов.

Аргумент workers указывает, сколько рабочих элементов используется для параллельной компиляции файлов. По умолчанию не используется несколько рабочих элементов. Если платформа не может использовать несколько рабочих элементов и указан аргумент workers, то в качестве запасного варианта будет использоваться последовательная компиляция. Если значение workers равно 0, то используется количество ядер в системе. Если значение workers меньше 0, то будет поднято значение ValueError.

invalidation_mode должен быть членом перечисления py_compile.PycInvalidationMode и управляет тем, как сгенерированные фрагменты становятся недействительными во время выполнения.

Аргументы stripdir, prependdir и limit_sl_dest соответствуют параметрам -s, -p и -e, описанным выше. Они могут быть указаны как str или os.PathLike.

Если значение hardlink_dupes равно true и два файла .pyc с разным уровнем оптимизации имеют одинаковое содержимое, используйте жесткие ссылки для объединения повторяющихся файлов.

Изменено в версии 3.2: Добавлены параметры legacy и optimize.

Изменено в версии 3.5: Добавлен параметр рабочие.

Изменено в версии 3.5: параметр quiet был изменен на многоуровневое значение.

Изменено в версии 3.5: Параметр legacy записывает только .pyc файлов, а не .pyo файлов, независимо от значения параметра optimize.

Изменено в версии 3.6: Принимает значение path-like object.

Изменено в версии 3.7: Был добавлен параметр invalidation_mode.

Изменено в версии 3.7.2: Значение параметра invalidation_mode по умолчанию изменено на None.

Изменено в версии 3.8: Установка значения workers равным 0 теперь позволяет выбрать оптимальное количество ядер.

Изменено в версии 3.9: Добавлены аргументы stripdir, prependdir, limit_sl_dest и hardlink_dupes. Значение по умолчанию для параметра maxlevels изменено с 10 на sys.getrecursionlimit()

compileall.compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, invalidation_mode=None, *, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False)

Скомпилируйте файл, указав путь полное имя. Верните значение true, если файл скомпилирован успешно, и значение false в противном случае.

Если задан параметр ddir, то он добавляется перед путем к файлу, который компилируется для использования при трассировке во время компиляции, а также компилируется в файл байт-кода, где он будет использоваться при трассировке и других сообщениях в случаях, когда исходный файл не существует на момент компиляции. выполняется файл с байт-кодом.

Если задано значение rx, его методу search передается полный путь к компилируемому файлу, и если он возвращает значение true, файл не компилируется и возвращается True. Это может быть использовано для исключения файлов, соответствующих регулярному выражению, заданному как объект re.Pattern.

Если значение quiet равно False или 0 (по умолчанию), имена файлов и другая информация выводятся в стандартном виде. Если значение 1, выводятся только ошибки. Установлено значение 2, все выходные данные отключены.

Если значение legacy равно true, файлы байт-кода записываются в их устаревшие местоположения и имена, что может привести к перезаписи файлов байт-кода, созданных другой версией Python. По умолчанию файлы записываются в их PEP 3147 расположение и имена, что позволяет файлам с байт-кодом из нескольких версий Python сосуществовать.

оптимизировать определяет уровень оптимизации для компилятора. Он передается встроенной функции compile(). Также принимает последовательность уровней оптимизации, которые приводят к многократной компиляции одного файла .py за один вызов.

invalidation_mode должен быть членом перечисления py_compile.PycInvalidationMode и управляет тем, как сгенерированные фрагменты становятся недействительными во время выполнения.

Аргументы stripdir, prependdir и limit_sl_dest соответствуют параметрам -s, -p и -e, описанным выше. Они могут быть указаны как str или os.PathLike.

Если значение hardlink_dupes равно true и два файла .pyc с разным уровнем оптимизации имеют одинаковое содержимое, используйте жесткие ссылки для объединения повторяющихся файлов.

Добавлено в версии 3.2.

Изменено в версии 3.5: параметр quiet был изменен на многоуровневое значение.

Изменено в версии 3.5: Параметр legacy записывает только .pyc файлов, а не .pyo файлов, независимо от значения параметра optimize.

Изменено в версии 3.7: Был добавлен параметр invalidation_mode.

Изменено в версии 3.7.2: Значение параметра invalidation_mode по умолчанию изменено на None.

Изменено в версии 3.9: Добавлены аргументы stripdir, prependdir, limit_sl_dest и hardlink_dupes.

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)

# 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)

См.также

Модуль py_compile

Байт-скомпилируйте один исходный файл.

Вернуться на верх