Документация Python неофициальный перевод

py_compile.md

46 строк · 7.2 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.6/library/py_compile.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 32.10. [`py_compile`](https://python-all.ru/3.6/library/py_compile.html#module-py_compile) – Компиляция исходных файлов Python89**Исходный код:** [Lib/py\_compile.py](https://python-all.ru/src/3.6/Lib/py_compile.py)1011---1213Модуль [`py_compile`](https://python-all.ru/3.6/library/py_compile.html#module-py_compile) содержит функцию для создания файла байт-кода из исходного файла и ещё одну функцию, которая вызывается при запуске модуля как скрипта.1415Хотя эта функция требуется нечасто, она может быть полезна при установке модулей для общего использования, особенно если некоторые пользователи могут не иметь прав на запись файлов кэша байт-кода в каталог, содержащий исходный код.1617#### `exception py_compile.PyCompileError`1819Исключение, возникающее при попытке компиляции файла.2021#### `py_compile.compile(file, cfile=None, dfile=None, doraise=False, optimize=-1)`2223Компилирует исходный файл в байт-код и записывает файл кэша байт-кода. Исходный код загружается из файла с именем *file*. Байт-код записывается в *cfile*, который по умолчанию равен пути [**PEP 3147**](https://python-all.ru/3.6/library/py_compile.html)/[**PEP 488**](https://python-all.ru/3.6/library/py_compile.html), заканчивающемуся на `.pyc`. Например, если *file* – это `/foo/bar/baz.py`, то *cfile* по умолчанию будет равен `/foo/bar/__pycache__/baz.cpython-32.pyc` для Python 3.2. Если указан *dfile*, то он используется как имя исходного файла в сообщениях об ошибках вместо *file*. Если *doraise* равно true, то при обнаружении ошибки во время компиляции *file* выбрасывается [`PyCompileError`](https://python-all.ru/3.6/library/py_compile.html#py_compile.PyCompileError). Если *doraise* равно false (по умолчанию), строка с ошибкой записывается в `sys.stderr`, но исключение не выбрасывается. Функция возвращает путь к скомпилированному файлу, то есть значение, которое было использовано как *cfile*.2425Если путь, по которому становится *cfile* (явно указанный или вычисленный), является символической ссылкой или нерегулярным файлом, будет вызвано [`FileExistsError`](https://python-all.ru/3.6/library/exceptions.html#FileExistsError). Это служит предупреждением о том, что импорт преобразует такие пути в обычные файлы, если ему разрешено записывать в них скомпилированные файлы. Это побочный эффект использования импортом переименования файлов для размещения окончательного скомпилированного файла, чтобы предотвратить проблемы параллельной записи.2627*optimize* управляет уровнем оптимизации и передаётся встроенной функции [`compile()`](https://python-all.ru/3.6/library/functions.html#compile). Значение по умолчанию `-1` выбирает уровень оптимизации текущего интерпретатора.2829Изменено в версии 3.2: Значение по умолчанию *cfile* изменено на соответствующее [**PEP 3147**](https://python-all.ru/3.6/library/py_compile.html). Ранее по умолчанию было *file* + `'c'` (`'o'` если была включена оптимизация). Также добавлен параметр *optimize*.3031Изменено в версии 3.4: Код изменён для использования [`importlib`](https://python-all.ru/3.6/library/importlib.html#module-importlib) при записи файла кэша байт-кода. Это означает, что семантика создания/записи файлов теперь соответствует тому, что делает [`importlib`](https://python-all.ru/3.6/library/importlib.html#module-importlib), например, права доступа, семантика записи с перемещением и т.д. Также добавлено предостережение, что [`FileExistsError`](https://python-all.ru/3.6/library/exceptions.html#FileExistsError) вызывается, если *cfile* является символической ссылкой или нерегулярным файлом.3233#### `py_compile.main(args=None)`3435Компилирует несколько исходных файлов. Файлы, указанные в *args* (или в командной строке, если *args* равно `None`), компилируются, и полученный байт-код кэшируется обычным образом. Эта функция не выполняет поиск по структуре каталогов для нахождения исходных файлов; она компилирует только явно указанные файлы. Если `'-'` – единственный параметр в args, список файлов берётся из стандартного ввода.3637Изменено в версии 3.2: добавлена поддержка `'-'`.3839Когда этот модуль запускается как скрипт, [`main()`](https://python-all.ru/3.6/library/py_compile.html#py_compile.main) используется для компиляции всех файлов, указанных в командной строке. Код возврата ненулевой, если один из файлов не удалось скомпилировать.4041> **См. также**42>43> **Модуль [`compileall`](https://python-all.ru/3.6/library/compileall.html#module-compileall)**44>45> Утилиты для компиляции всех исходных файлов Python в дереве каталогов.46