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