py_compile — Компиляция исходных файлов Python¶
Исходный код: Lib/py_compile.py
Модуль py_compile предоставляет функцию для генерации файла байт-кода из
исходного файла и другую используемую функцию, когда исходный файл модуля
вызывается в качестве сценария.
Хотя он не часто необходим, он может быть полезен, устанавливая модули для общего использования, особенно если у некоторых пользователей может не быть разрешения написать байту-код файлы кэш в справочнике, содержащем исходный код.
-
exception
py_compile.PyCompileError¶ Исключение при возникновении ошибки при попытке компиляции файла.
-
py_compile.compile(file, cfile=None, dfile=None, doraise=False, optimize=-1, invalidation_mode=PycInvalidationMode.TIMESTAMP, quiet=0)¶ Скомпилировать исходный файл в байт-код и записать файл кэша байт-кода. Исходный код загружается из файла с именем file. Байт-код записывается в cfile, который по умолчанию соответствует пути PEP 3147 / PEP 488, оканчивающемуся на
.pyc. Например, если file — это/foo/bar/baz.py, cfile по умолчанию будет/foo/bar/__pycache__/baz.cpython-32.pycдля Python 3.2. Если указано dfile, оно используется как имя исходного файла в сообщениях об ошибках вместо file. Если doraise истинно,PyCompileErrorвозникает при обнаружении ошибки при компиляции file. Если doraise имеет значение false (по умолчанию), строка ошибки записывается вsys.stderr, но исключение не возникает. Эта функция возвращает путь к файлу с байтовой компиляцией, т.е. какое бы значение cfile ни использовалось.Аргументы doraise и quiet определяют способ обработки ошибок при компиляции файла. Если quiet равно 0 или 1, а doraise равно false, то включается поведение по умолчанию: ошибка строка записывается в
sys.stderr, а функция возвращаетNoneвместо пути. Если doraise имеет значение true, вместо него возникаетPyCompileError. Однако, если quiet равно 2, сообщение не записывается, и doraise не имеет эффекта.Если путь, которым становится cfile (или явно определенный или вычисленный) будет симлинк или необычный файл, то будет поднято
FileExistsError. Это должно быть предупреждением, что импорт превратит эти пути в обычные файлы, если разрешено записывать скомпилированные байтами файлы в эти пути. Это побочный эффект импорта с использованием переименования файлов, чтобы поместить на место последний скомпилированный в байтах файл, чтобы предотвратить одновременные проблемы записи файлов.optimize управляет уровнем оптимизации и передается встроенной функции
compile(). По умолчанию для параметра-1выбирается уровень оптимизации текущего интерпретатора.invalidation_mode должен быть членом перечисления
PycInvalidationModeи управляет тем, как сгенерированный байт-код кэш считается недействительным во время выполнения. Значение по умолчанию равноPycInvalidationMode.CHECKED_HASH, если установлена переменная средыSOURCE_DATE_EPOCH, в противном случае значение по умолчанию равноPycInvalidationMode.TIMESTAMP.Изменено в версии 3.2: Измененный по умолчанию значение cfile, чтобы быть PEP 3147-соответствующим. Предыдущее значение по умолчанию: file +
'c'('o'если была включена оптимизация). Также добавлен параметр optimize.Изменено в версии 3.4: Изменено код для использования
importlibдля записи файла байт-код кэш. Это означает, что семантика создания/записи файлов теперь соответствует тому, что делаетimportlib, например, разрешения, семантика записи и перемещения и т.д. Также добавлена оговорка, чтоFileExistsErrorвозникает, если cfile является symlink или нерегулярным файлом.Изменено в версии 3.7: Параметр invalidation_mode добавлен, как указано в разделе PEP 552. Если переменная окружения
SOURCE_DATE_EPOCHбудет установлена, то invalidation_mode будет вызван кPycInvalidationMode.CHECKED_HASH.Изменено в версии 3.7.2: Переменная окружения
SOURCE_DATE_EPOCHбольше не отвергает значение аргумента invalidation_mode и определяет его по умолчанию значение вместо этого.Изменено в версии 3.8: Добавлен параметр quiet.
-
class
py_compile.PycInvalidationMode¶ Перечисление возможных методов, которые интерпретатор может использовать для определения того, является ли файл байт-кода актуальным для исходного файла. Файл
.pycуказывает требуемый режим недействительности в заголовке. Дополнительные сведения о том, как Инвалидация кэша байткода делает файлы Python недействительными во время выполнения, см. в разделе.pyc.Добавлено в версии 3.7.
-
TIMESTAMP¶ Файл
.pycвключает метку времени и размер исходного файла, который Python сравнит с метаданными исходного файла во времени выполнения, чтобы определить, должен ли файл.pycбыть восстановлен.
-
CHECKED_HASH¶ Файл
.pycвключает мешанину содержания исходного файла, которое Python сравнит с источником во времени выполнения, чтобы определить, должен ли файл.pycбыть восстановлен.
-
UNCHECKED_HASH¶ Как и
CHECKED_HASH, файл.pycвключает в себя хэш содержимого исходного файла. Однако во время выполнения программы Python будет предполагать, что файл.pycобновлен и вообще не проверяет.pycна соответствие исходному файлу.Этот выбор полезен, когда
.pycsусовершенствованы некоторой системой, внешней к Python как построить система.
-
-
py_compile.main(args=None)¶ Скомпилировать несколько исходных файлов. Файлы назвали в args (или на командной строке, если args -
None), собраны, и получающийся байт-код припрятался про запас нормальным способом. Эта функция не выполняет поиск исходных файлов в структуре каталогов; он компилирует только файлы, именованные явно. Если'-'является единственным параметром в args, список файлов берется из стандартного ввода.Изменено в версии 3.2: Добавлена поддержка
'-'.
Когда этим модулем управляют как сценарий, main() - используемый, чтобы
собрать все файлы, названные на командной строке. Состояние выхода ненулевое,
если один из файлов не удалось скомпилировать.
См.также
- Модуль
compileall - Утилиты для компиляции всех исходных файлов Python в дереве каталогов.
