В процессе запуска любого Python-приложения (файла), интерпретатор предварительно инициирует этап компиляции. Упрощенно говоря, загруженный программный код преобразуется в формат, с которым корректно может работать ПК. После компиляции код загружается в ОЗУ и запускается на выполнение. После преобразования код занимает гораздо меньше места и работает быстрее.
Однако такой формат не является постоянным, после завершения выполнения откомпилированный код автоматически удаляется из оперативной памяти. При каждом запуске компиляция запускается повторно, что существенно замедляет запуск и увеличивает нагрузку на аппаратную часть.
Однако предусмотрена возможность выполнить компиляцию нужных модулей с сохранением результата. В этом случае при запуске файла повторная компиляция не требуется, что сокращает время запуска.
Для компиляции используется команда формата:
python -m compileall <Путь к файлу>|<Путь к каталогу> <Опции>
Если указать только путь к папке, компиляция затронет все модули в данном каталоге. Вложенные папки также учитываются. Для сохранения новых файлов в исходном каталоге создается папка __pycache__. Для новых файлов создаются имена по следующему шаблону:
<Имя исходного модуля>.cpython-<Версия Python>.pyc
Расширение .pyc изначально ассоциировано с исполняющей средой Python, что позволяет их запускать при помощи мышки. Также можно просто передать данный файл другому пользователю.
Если компиляцию запустить повторно, откомпилированы будут только файлы, в которых есть изменения. Для этого Python отслеживает время последнего изменения файлов.
Для команды компиляции доступны следующие опции:
-f – принудительно компилировать все файлы, даже если изменения не вносились;
-l – не компилировать файлы во вложенных каталогах.
Стоит учитывать, что если подключается внешний модуль для использования его функционала, он всегда компилируется с созданием соответствующего файла. Это необходимо для ускорения работы приложений, которые используют данный модуль для работы.