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 в дерево каталогов.