Вы изучаете данные и хотите поделиться своим кодом 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)
nochkin
07.07.2023 12:39+3А ведь ещё есть Pyrex (правда, давно не обновлялся) и популярный в своё время py2exe (аналог PyInstaller по функциям).
sergey-gornostaev
07.07.2023 12:39+2Мнение непопулярное, но если вам нужен исполняемый файл, то просто не используйте интерпретируемый язык программирования.
ivankudryavtsev
07.07.2023 12:39Если Nuitka дает возможность нативной компиляции, в чем ценность Вашего совета? Я бы понял, если бы аргумент был про производительность, но мнение не релевантно проблеме. И Python не интерпретируемый, а байт-код со своим рантаймом, к слову. Или Java тоже интерпретируемый в Вашей классификации?
kostushka
07.07.2023 12:39вы можете защитить свой код от изменения или кражи, облегчить другим людям использование вашей программы и сделать автоматическим выполнение задач.
Для защиты (от изменения, от утечки) скриптов на питоне использую pyarmor, исполняемый код шифруется, а при запуске или вызове функций разворачивается, можно сделать ограничение по времени, привязать к оборудованию
Вопрос к знатокам, а если нужно модуль на питоне скомпилировать в динамически подключаемую библиотеку, что использовать? Nuitka?
ivankudryavtsev
И два способа, которые вы на самом деле хотите:
Nuitka
Cythonize
Pyinstaller не компилирует ваши py-файлы, а обычно именно это и надо.
Ваш подход этого не дает. PyInstaller - это "SFX", он распаковывает из архива все Python-файлы в /tmp и запускает их.
LuggerFormas
Спасибо, мил человек!
Реквестирую подобную статью, но по правильным инструментам (и мб с описанием, что там с транспиляцией либ типа numpy, pandas и т.п.)
thevlad
Питоновский байткод довольно примитивен и если даже "скомпилирован", декомпилируется без особых проблем.
https://www.augmentedmind.de/2021/05/16/distribute-python-applications/
Из этого как по мне для скрытия кода Nuitka наиболее интересная, она транспилирует байткод в эквивалентный кода на Си.
По поводу библиотек не очень понял, та часть что на питоне - это обычный байткод, та что на Сях - нативный бинарник.