32.10. py_compile – Компиляция исходных файлов Python¶py_compile – Compile Python source files
Исходный код: Lib/py_compile.py
Модуль py_compile предоставляет функцию для генерации байт-кодового файла из исходного файла, а также другую функцию, используемую при запуске исходного файла модуля как скрипта.
Хотя эта функция требуется нечасто, она может быть полезна при установке модулей для общего использования, особенно если некоторые пользователи могут не иметь прав на запись файлов кэша байт-кода в каталог, содержащий исходный код.
- exception py_compile.PyCompileError¶
Исключение, возникающее при попытке компиляции файла.
- py_compile.compile(file, cfile=None, dfile=None, doraise=False, optimize=-1)¶
Компилирует исходный файл в байт-код и записывает кэш-файл байт-кода. Исходный код загружается из файла с именем file. Байт-код записывается в cfile, который по умолчанию соответствует пути PEP 3147, оканчивающемуся на .pyc (.pyo, если в текущем интерпретаторе включена оптимизация). Например, если 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, которое было использовано.
Если путь, который принимает cfile (явно указанный или вычисленный), является символической ссылкой или нерегулярным файлом, будет возбуждено исключение FileExistsError. Это служит предупреждением о том, что импорт превратит такие пути в обычные файлы, если ему будет разрешено записывать в них скомпилированные файлы. Это побочный эффект использования импортом переименования файлов для помещения итогового скомпилированного файла на место, чтобы предотвратить проблемы параллельной записи.
Параметр optimize управляет уровнем оптимизации и передается встроенной функции compile(). Значение по умолчанию -1 выбирает уровень оптимизации текущего интерпретатора.
Изменено в версии 3.2: Изменено значение по умолчанию cfile на соответствующее PEP 3147. Ранее значением по умолчанию было file + 'c' ('o', если была включена оптимизация). Также добавлен параметр optimize.
Изменено в версии 3.4: Изменен код для использования importlib при записи кэш-файла байт-кода. Это означает, что семантика создания/записи файлов теперь соответствует тому, что делает importlib, например права доступа, семантика записи-и-перемещения и т.д. Также добавлено предостережение о том, что исключение FileExistsError возбуждается, если cfile является символической ссылкой или нерегулярным файлом.
- py_compile.main(args=None)¶
Компилирует несколько исходных файлов. Файлы, указанные в args (или в командной строке, если args равно None), компилируются, и результирующий байт-код кэшируется обычным образом. Эта функция не просматривает структуру каталогов для поиска исходных файлов; она компилирует только явно указанные файлы. Если '-' – единственный параметр в args, список файлов берется из стандартного ввода.
Изменено в версии 3.2: добавлена поддержка '-'.
При запуске этого модуля как скрипта, функция main() используется для компиляции всех файлов, перечисленных в командной строке. Код возврата будет ненулевым, если один из файлов не удалось скомпилировать.
См. также
- Модуль compileall
- Утилиты для компиляции всех исходных файлов Python в дереве каталогов.