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 3147PEP 488 path, заканчивающийся на
.pyc. Например, если значение file равно/foo/bar/baz.py, то значение cfile по умолчанию будет равно/foo/bar/__pycache__/baz.cpython-32.pycдля Python 3.2. Если указано значение dfile, оно используется вместо file в качестве имени исходного файла, из которого получены исходные строки для отображения в трассировках исключений. Если значение doraise равно true, то при возникновении ошибки при компиляции file выдается сообщениеPyCompileError. Если значение doraise равно false (значение по умолчанию), строка ошибки записывается вsys.stderr, но исключение не генерируется. Эта функция возвращает путь к файлу, скомпилированному в байтах, т.е. любое значение cfile, которое было использовано.Эти аргументы doraise и quiet определяют, как обрабатываются ошибки при компиляции файла. Если значение quiet равно 0 или 1, а значение doraise равно false, то включается поведение по умолчанию: строка ошибки записывается в
sys.stderr, и функция возвращаетNoneвместо пути. Если значение doraise равно true, то вместо этого выводится значениеPyCompileError. Однако, если значение quiet равно 2, сообщение не выводится, и doraise не действует.Если путь, которым становится cfile (либо явно указанный, либо вычисленный), является символической ссылкой или необычным файлом, будет поднят
FileExistsError. Это служит предупреждением о том, что импорт преобразует эти пути в обычные файлы, если разрешено записывать в них файлы, скомпилированные по байтам. Это побочный эффект импорта, использующего переименование файлов для размещения конечного файла, скомпилированного по байтам, на место, чтобы предотвратить проблемы с одновременной записью файлов.оптимизировать управляет уровнем оптимизации и передается встроенной функции
compile(). Значение по умолчанию-1определяет уровень оптимизации текущего интерпретатора.invalidation_mode должен быть членом перечисления
PycInvalidationModeи управляет тем, как сгенерированный кэш байт-кода становится недействительным во время выполнения. Значение по умолчанию равноPycInvalidationMode.CHECKED_HASH, если задана переменная окруженияSOURCE_DATE_EPOCH, в противном случае значение по умолчанию равноPycInvalidationMode.TIMESTAMP.Изменено в версии 3.2: Изменено значение по умолчанию для cfile, чтобы оно соответствовало PEP 3147. Предыдущее значение по умолчанию было file +
'c'('o'если была включена оптимизация). Также добавлен параметр оптимизировать.Изменено в версии 3.4: Изменен код, чтобы использовать
importlibдля записи файла в кэш с байт-кодом. Это означает, что семантика записи при создании файла теперь совпадает с семантикойimportlib, например, разрешения, семантика записи и перемещения и т.д. Также добавлено предостережение о том, чтоFileExistsErrorвозникает, если cfile является символической ссылкой или необычным файлом.Изменено в версии 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, например системой сборки.
Интерфейс командной строки¶
Этот модуль может быть вызван как скрипт для компиляции нескольких исходных файлов. Файлы, указанные в filenames, компилируются, и результирующий байт-код кэшируется обычным способом. Эта программа не выполняет поиск в структуре каталогов для поиска исходных файлов; она только компилирует файлы с явными именами. Статус завершения не равен нулю, если один из файлов не удалось скомпилировать.
- <file> ... <fileN>¶
- -¶
Позиционные аргументы - это файлы для компиляции. Если
-является единственным параметром, список файлов берется из стандартного ввода.
- -q, --quiet¶
Подавляйте вывод ошибок.
Изменено в версии 3.2: Добавлена поддержка -.
Изменено в версии 3.10: Добавлена поддержка -q.
См.также
- Модуль
compileall Утилиты для компиляции всех исходных файлов Python в дерево каталогов.