Компиляция Python-файлов



В процессе запуска любого Python-приложения (файла), интерпретатор предварительно инициирует этап компиляции. Упрощенно говоря, загруженный программный код преобразуется в формат, с которым корректно может работать ПК. После компиляции код загружается в ОЗУ и запускается на выполнение. После преобразования код занимает гораздо меньше места и работает быстрее.

Однако такой формат не является постоянным, после завершения выполнения откомпилированный код автоматически удаляется из оперативной памяти. При каждом запуске компиляция запускается повторно, что существенно замедляет запуск и увеличивает нагрузку на аппаратную часть.

Однако предусмотрена возможность выполнить компиляцию нужных модулей с сохранением результата. В этом случае при запуске файла повторная компиляция не требуется, что сокращает время запуска.

Для компиляции используется команда формата:

python -m compileall <Путь к файлу>|<Путь к каталогу> <Опции>

Если указать только путь к папке, компиляция затронет все модули в данном каталоге. Вложенные папки также учитываются. Для сохранения новых файлов в исходном каталоге создается папка __pycache__. Для новых файлов создаются имена по следующему шаблону:

<Имя исходного модуля>.cpython-<Версия Python>.pyc

Расширение .pyc изначально ассоциировано с исполняющей средой Python, что позволяет их запускать при помощи мышки. Также можно просто передать данный файл другому пользователю.

Если компиляцию запустить повторно, откомпилированы будут только файлы, в которых есть изменения. Для этого Python отслеживает время последнего изменения файлов.

Для команды компиляции доступны следующие опции:

-f – принудительно компилировать все файлы, даже если изменения не вносились;
-l – не компилировать файлы во вложенных каталогах.

Стоит учитывать, что если подключается внешний модуль для использования его функционала, он всегда компилируется с созданием соответствующего файла. Это необходимо для ускорения работы приложений, которые используют данный модуль для работы.



Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: