Spec-Zone.ru › Python 3.5

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)

Компилирует файл исходного кода в байткод и записывает сгенерированный файл в кэш. Исходный код загружается из файла с именем 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 равно 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() для компиляции всех файлов, указанных в командной строке. Код завершается с ненулевым статусом, если один из файлов не удалось скомпилировать.

См. также

Module compileall
Утилиты для компиляции всех файлов Python исходного кода в дереве каталогов.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.5/library/py_compile.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API