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

Исполняемый файл — это файл, который может быть установлен или запущен на компьютере без использования дополнительного программного обеспечения или библиотек. Он имеет расширение .exe и обычно используется для программных приложений в Windows. Конвертируя свой сценарий Python в исполняемый файл, вы можете защитить свой код от изменения или кражи, облегчить другим людям использование вашей программы и сделать автоматическим выполнение задач.

В этой статье я покажу вам два простых метода конвертации файла Python в исполняемый файл с помощью PyInstaller и auto-py-to-exe. Это две популярные библиотеки Python, которые позволяют создавать автономные исполняемые файлы из скриптов Python. Для работы вам понадобится Python 3.6 или выше.

Способ 1: С помощью библиотеки PyInstaller:

Ссылка

PyInstaller — это библиотека Python, которая может анализировать ваш код и компоновать его с необходимыми модулями и библиотеками в один исполняемый файл. Она поддерживает множество платформ, включая Windows, Linux и Mac OS X. PyInstaller также может обрабатывать сложные случаи, такие как импорт файлов данных, скрытый импорт, приложения с графическим интерфейсом и т.д.

Чтобы использовать PyInstaller, вам нужно сначала установить его с помощью pip:

pip install pyinstaller

Затем вам нужно написать свой скрипт Python и сохранить его с расширением .py. В этом примере я буду использовать простой сценарий, который печатает "Hello World" и сохраняет его под именем hello.py:

print("Hello World")

Далее необходимо открыть командную строку и перейти в каталог, где находится ваш скрипт. Затем необходимо выполнить следующую команду:

pyinstaller hello.py

В результате вы создадите папку dist, содержащая исполняемый файл hello.exe. Вы можете дважды щелкнуть на этом файле, чтобы запустить его или поделиться им с другими.

Если вы хотите создать однофайловый исполняемый файл, не требующий дополнительных файлов или папок, вы можете использовать ключ --onefile:

pyinstaller --onefile hello.py

В папке dist будет создан один файл hello.exe, содержащий все необходимые коды и ресурсы.

Если вы хотите скрыть окно консоли при запуске исполняемого файла, вы можете использовать опцию --noconsole:

pyinstaller --noconsole --onefile hello.py

Будет создан  исполняемый файл, работающий в фоновом режиме.

Вы также можете настроить другие аспекты исполняемого файла, такие как иконка, имя, версия и т.д., используя различные опции или создав файл спецификации. За более подробной информацией вы можете обратиться к документации PyInstaller.

Способ 2: С помощью auto-py-to-exe:

Ссылка

auto-py-to-exe — это еще одна библиотека Python, которая может конвертировать скрипты Python в исполняемые файлы. Она основана на PyInstaller, но имеет графический интерфейс для пользователя (GUI), что делает ее более простой в работе. Вы можете просто выбрать свой скрипт, подобрать параметры и нажать кнопку, чтобы сгенерировать исполняемый файл.

Чтобы использовать auto-py-to-exe, вам нужно сначала установить его с помощью pip:

pip install auto-py-to-exe

Затем необходимо выполнить следующую команду для запуска графического интерфейса пользователя:

auto-py-to-exe

Откроется окно, которое выглядит следующим образом:

Здесь вы можете выбрать свой скрипт, нажав на кнопку Browse рядом с Script Location. Вы также можете выбрать, хотите ли вы получить исполняемый файл в одном файле или в одной папке, выбрав One File или One Directory в разделе Output Options.

Вы также можете изменить другие настройки, такие как иконка, имя, окно консоли и т.д., перейдя на вкладку Advanced и изменив поля Additional Files или Window Based Options.

После того как вы закончите с настройками, нажмите на кнопку Convert .py to .exe в нижней части окна. Это запустит процесс преобразования и покажет результат на вкладке Консоль.

После завершения преобразования вы сможете найти исполняемый файл в папке вывода, указанной в разделе Output Options. Вы можете запустить его или поделиться им с другими пользователями.

От редакции

28 августа начнется новый поток по языку программирования Python. На нем мы разберем: Библиотеки Python и решение конкретных задач DevOps; Правила эффективного и поддерживаемого кода; Принципы автоматизации: Docker, Gitlab, Prometheus, K8S и многое другое.

Узнать больше о потоке вы можете на нашем сайте: https://slurm.io/course-python-for-ops

Комментарии (10)


  1. ivankudryavtsev
    07.07.2023 12:39
    +24

    И два способа, которые вы на самом деле хотите:

    • Nuitka

    • Cythonize

    Pyinstaller не компилирует ваши py-файлы, а обычно именно это и надо.

    Вы изучаете данные и хотите поделиться своим кодом Python с другими, не раскрывая исходный код

    Ваш подход этого не дает. PyInstaller - это "SFX", он распаковывает из архива все Python-файлы в /tmp и запускает их.


    1. LuggerFormas
      07.07.2023 12:39
      +5

      Спасибо, мил человек!

      Реквестирую подобную статью, но по правильным инструментам (и мб с описанием, что там с транспиляцией либ типа numpy, pandas и т.п.)


      1. thevlad
        07.07.2023 12:39

        Питоновский байткод довольно примитивен и если даже "скомпилирован", декомпилируется без особых проблем.

        https://www.augmentedmind.de/2021/05/16/distribute-python-applications/

        Из этого как по мне для скрытия кода Nuitka наиболее интересная, она транспилирует байткод в эквивалентный кода на Си.

        По поводу библиотек не очень понял, та часть что на питоне - это обычный байткод, та что на Сях - нативный бинарник.


  1. vagon333
    07.07.2023 12:39
    +2

    А Codon никто не пробовал (прошу не опошлять ассоциациями)?

    https://github.com/exaloop/codon


  1. nochkin
    07.07.2023 12:39
    +3

    А ведь ещё есть Pyrex (правда, давно не обновлялся) и популярный в своё время py2exe (аналог PyInstaller по функциям).


    1. sergey-gornostaev
      07.07.2023 12:39
      +1

      Pyrex - это давно уже Cython, который регулярно обновляется.


      1. nochkin
        07.07.2023 12:39

        Спасибо за информацию, приятно знать.


  1. sergey-gornostaev
    07.07.2023 12:39
    +2

    Мнение непопулярное, но если вам нужен исполняемый файл, то просто не используйте интерпретируемый язык программирования.


    1. ivankudryavtsev
      07.07.2023 12:39

      Если Nuitka дает возможность нативной компиляции, в чем ценность Вашего совета? Я бы понял, если бы аргумент был про производительность, но мнение не релевантно проблеме. И Python не интерпретируемый, а байт-код со своим рантаймом, к слову. Или Java тоже интерпретируемый в Вашей классификации?


  1. kostushka
    07.07.2023 12:39

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

    Для защиты (от изменения, от утечки) скриптов на питоне использую pyarmor, исполняемый код шифруется, а при запуске или вызове функций разворачивается, можно сделать ограничение по времени, привязать к оборудованию

    Вопрос к знатокам, а если нужно модуль на питоне скомпилировать в динамически подключаемую библиотеку, что использовать? Nuitka?