Конвертация скриптов Python в исполняемые и другие форматы
Конвертация Python файлов - это процесс преобразования скриптов с расширением .py в другие форматы, такие как исполняемые файлы (.exe), байт-код (.pyc), JavaScript (.js) или WebAssembly (.wasm). Целью таких преобразований может быть распространение приложений без необходимости установки Python, сокрытие исходного кода, интеграция с веб-средой или оптимизация производительности. В статье рассмотрены наиболее эффективные и популярные инструменты, а также альтернативные подходы с примерами и пояснениями.
Методы конвертации Python скриптов
PyInstaller - основной способ создания исполняемых файлов
Как упаковать Python скрипт в один .exe файл для Windows?
PyInstaller анализирует код, находит все зависимости и упаковывает их вместе с интерпретатором Python в автономный исполняемый файл. Это решение подходит для распространения приложений среди пользователей, не имеющих установленного Python.
pip install pyinstaller
pyinstaller --onefile my_script.pyPython convert py (конвертация python файлов)
После выполнения в папке dist появится файл my_script.exe. Ключ --onefile создает один исполняемый файл, а --windowed скрывает консоль (для GUI-приложений).
Типичная ошибка: отсутствие библиотек, указанных в импортах. Решение - установить все зависимости через pip или использовать опцию --hidden-import для явного указания модулей.
Другая проблема: большой размер exe-файла. Уменьшить его можно сжатием UPX (флаг --upx-dir).
Nuitka - компиляция в C++ с последующей сборкой
Как получить нативный исполняемый файл с высокой производительностью?
Nuitka компилирует Python код в C++, затем вызывает компилятор C++ (например, GCC или MSVC) для создания .exe. Результат работает быстрее и без дополнительных зависимостей на целевой системе.
pip install nuitka
nuitka --standalone --onefile my_script.py
Для успешной компиляции требуется установленный компилятор (Windows - MSVC из Visual Studio).
cx_Freeze - кроссплатформенная сборка
Как создать исполняемый файл, работающий на Windows, macOS и Linux?
cx_Freeze упаковывает скрипт вместе с модулями Python и интерпретатором. Поддерживает множество платформ и настройку через setup.py.
pip install cx_freeze
python setup.py build
Пример setup.py:
from cx_Freeze import setup, Executable
setup(
name="MyApp",
version="1.0",
executables=[Executable("my_script.py")]
)
Ошибка: отсутствие зависимостей, явно не указанных. Решение - добавить параметр includes в setup.py.
py2exe - сборка для Windows
Как из Python скрипта сделать .exe без лишних настроек?
py2exe специализируется на Windows и прост в использовании. Создает .exe и набор dll.
pip install py2exe
python setup.py py2exe
Компиляция в байт-код (.pyc)
Как защитить исходный код от просмотра?
Python компилирует .py в байт-код .pyc при импорте. Можно принудительно скомпилировать все файлы с помощью модуля py_compile или compileall.
python -m compileall .
# или
import py_compile
py_compile.compile('my_script.py')
Скомпилированные .pyc файлы можно запускать обычным интерпретатором. Защита минимальна - байт-код легко декомпилируется.
Транспиляция в JavaScript (чтобы запускать в браузере)
Как конвертировать Python в JS для веб-приложений?
Инструменты, такие как Transcrypt, Skulpt, Brython, позволяют преобразовать Python код в JavaScript. Пример с Transcrypt:
pip install transcrypt
transcrypt my_script.py
Результат - папка с .js файлами, которые подключаются к HTML. Операторы Python преобразуются напрямую, сохраняя читаемость.
Проблема: не все библиотеки Python поддерживаются. Транспиляция ограничена чистыми модулями, без C-расширений.
Конвертация через компиляцию в WebAssembly (Pyodide)
Как выполнить Python код прямо в браузере?
CPython компилируется в WebAssembly, и Pyodide запускает его изолированно. Скрипты .py можно выполнять на стороне клиента без транспиляции.
# Использование через CDN в HTML
<script src="https://cdn.jsdelivr.net/pyodide/v0.25.0/full/pyodide.js"></script>
<script>
async function run() {
let pyodide = await loadPyodide();
await pyodide.runPythonAsync("print('Привет, мир!')");
}
run();
</script>
Такой подход позволяет запускать любые Python библиотеки, скомпилированные под wasm.
Преобразование .py в .ipynb (Jupyter Notebook)
Как перенести скрипт в формат тетрадки для интерактивной работы?
Модуль jupytext или инструмент p2j конвертируют .py в .ipynb, сохраняя код и комментарии. Пример:
pip install jupytext
jupytext --to notebook my_script.py
Полученный .ipynb можно открыть в JupyterLab или VS Code.
Расширенные примеры конвертации Python файлов
1. PyInstaller с настройками и оптимизацией
Пример скрипта hello.py:
import sys
print("Hello from Python {}".format(sys.version))
Команда для сборки одним файлом с иконкой и без консоли (для Windows):
pyinstaller --onefile --windowed --icon=app.ico hello.py
Результат: в папке dist появляется hello.exe.
Вывод при запуске hello.exe:
Hello from Python 3.12.3 (tags/v3.12.3:...) [MSC v.1938 64 bit (AMD64)]
Для добавления скрытых импортов (например, библиотека cryptography не всегда определяется):
pyinstaller --onefile --hidden-import=cryptography hello.py
2. Nuitka с продвинутыми флагами
Пример кода calc.py:
def add(a, b):
return a + b
if __name__ == "__main__":
print(add(3, 5))
Команда с оптимизацией и удалением исходного кода:
nuitka --standalone --onefile --remove-output --lto=yes calc.py
Результат: исполняемый файл calc.exe, который при запуске выводит:
8
3. Transcrypt – транспиляция Python в JavaScript
Исходный файл main.py:
def greet(name):
return f"Hello, {name}!"
print(greet("World"))
Команда транспиляции:
transcrypt --map main.py
Создаются файлы: __javascript__/main.js и main.map.js. Содержимое main.js (сокращённо):
// Transcrypt module
var __name__ = "__main__";
var greet = function (name) {
return "Hello, " + name + "!";
};
....
var print = __t__["print"];
print(hello("World"));
Для выполнения в браузере HTML-файл подключает main.js и вызывает __main__().
4. Компиляция всего проекта в .pyc
Структура проекта:
project/
main.py
utils.py
config.py
Команда компиляции рекурсивно:
python -m compileall -b project/
Ключ -b помещает .pyc файлы в ту же папку (вместо __pycache__). Результат:
project/ main.pyc utils.pyc config.pyc
Запуск main.pyc возможен напрямую:
python main.pyc
5. Конвертация .py в .ipynb с помощью p2j
Утилита p2j (установка pip install p2j) конвертирует скрипт, разбивая на ячейки по маркерам # %%:
p2j script.py --with-markers
Исходный script.py:
# %% Cell 1
import numpy as np
# %% Cell 2
data = np.random.rand(10)
print(data)
Результат - файл script.ipynb, который при открытии показывает ячейки с кодом.