Конвертация скриптов 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.py

Python 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, который при открытии показывает ячейки с кодом.

Конвертация Python файлов - comments

En
Python convert py (python)