Я создаю приложение Python и не хочу заставлять моих клиентов устанавливать Python и модули. Я также хочу сделать свое приложение закрытым.
Итак, есть ли способ скомпилировать скрипты Python для автономных исполняемых файлов?
Я создаю приложение Python и не хочу заставлять моих клиентов устанавливать Python и модули. Я также хочу сделать свое приложение закрытым.
Итак, есть ли способ скомпилировать скрипты Python для автономных исполняемых файлов?
Вы можете использовать py2exe, как уже было сказано, и использовать cython для преобразования вашего ключа .py
файлы в .pyc
, C скомпилированные файлы, такие как .dll
в Windows и .so
в Linux, гораздо труднее вернуть, чем обычные файлы .pyo
и .pyc
(а также повысить производительность!)
Вы можете использовать PyInstaller для упаковки программ Python в качестве автономных исполняемых файлов. Он работает на Windows, Linux и Mac.
Быстрый запуск PyInstaller
Установите PyInstaller из PyPI:
pip install pyinstaller
Перейдите в каталог программ и запустите:
pyinstaller yourprogram.py
Это приведет к созданию пакета в подкаталоге
dist
.Более подробное руководство по работе см. В руководстве.
Возможно, вы захотите изучить Nuitka. Он использует исходный код python и преобразует его в вызовы API С++. Затем он компилируется в исполняемый двоичный файл (ELF в Linux). Он существует уже несколько лет и поддерживает широкий спектр версий Python.
Вероятно, вы также получите повышение производительности, если вы его используете. Рекомендуется.
И третий вариант cx_Freeze
, который является кросс-платформенным.
Я хотел бы скомпилировать некоторую полезную информацию о создании автономных файлов в Windows с помощью Python 2.7.
Я использовал py2exe, и он работает, но у меня были некоторые проблемы.
Он показал некоторые проблемы для создания отдельных файлов в 64-битных версиях Windows: Использование bundle_files = 1 с py2exe не работает;
Необходимо создать файл setup.py для его работы. http://www.py2exe.org/index.cgi/Tutorial#Step2;
У меня были проблемы с зависимостями, которые вам нужно решить, импортируя пакеты в установочный файл,
Мне не удалось заставить его работать вместе с PyQt..
Эта последняя причина заставила меня попробовать PyInstaller http://www.pyinstaller.org/.
По-моему, это намного лучше, потому что:
Я предлагаю создать файл .bat со следующими строками, например (pyinstaller.exe должен находиться в Пути Windows):
pyinstaller.exe --onefile MyCode.py
Вы можете создать один файл среди других опций (https://pyinstaller.readthedocs.io/en/stable/usage.html#options).
У меня была только одна проблема с использованием пакета PyInstaller и многопроцессорности, который был решен с помощью этого рецепта: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing.
Итак, я думаю, что, по крайней мере для python 2.7, лучшим и простым вариантом является PyInstaller.
Да, можно скомпилировать скрипты Python в автономный исполняемый файл.
PyInstaller можно использовать для преобразования программ Python в автономные исполняемые файлы под Windows, Linux, Mac OS X, FreeBSD, Solaris и AIX. Это один из рекомендуемых преобразователей.
py2exe преобразует скрипты Python в исполняемый файл только в платформе Windows.
Cython является статическим компилятором как для языка программирования Python, так и для расширенного языка программирования Cython.
вам может понравиться py2exe. вы также найдете там информацию о том, как это сделать на linux
Использовать py2exe.... использовать ниже настроенные файлы:
from distutils.core import setup
import py2exe
from distutils.filelist import findall
import matplotlib
setup(
console=['PlotMemInfo.py'],
options={
'py2exe': {
'packages' : ['matplotlib'],
'dll_excludes': ['libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll',
'libgdk_pixbuf-2.0-0.dll']
}
},
data_files = matplotlib.get_py2exe_datafiles()
)
Я также рекомендую pyinstaller
для лучшей обратной совместимости, такой как python 2.3 - 2.7.
py2exe, вы должны иметь python 2.6
Для скриптов Python 3.2 единственным выбором является Cxfreeze. Создайте его из источников, иначе он не будет работать.
Для python 2.x я предлагаю pyinstaller, поскольку он может упаковать программу python в один исполняемый файл, в отличие от CxFreeze, который выводит также библиотеки.
py2exe сделает exe файл, который вы хотите, но вам нужно иметь ту же версию MSVCR90.dll на машине, которую вы собираетесь использовать в своем новом exe. Подробнее см. http://www.py2exe.org/index.cgi/Tutorial.
Вы можете найти список утилит распространения, перечисленных @https://wiki.python.org/moin/DistributionUtilities.
Я использую bbfreeze, и он работает очень хорошо (но для поддержки python 3).
Не совсем упаковка кода python, но теперь есть и grumpy из google, который переводит код в Go. Он не поддерживает python C api, поэтому он может не работать для всех проектов.
Мне нравится pyinstaller - особенно "оконный" вариант:
pyinstaller --onefile --windowed myscript.py
Он создаст один файл *.exe в папке dist/.
Используйте Cython для преобразования в c, компиляции и ссылки с gcc. Другим может быть, сделать основные функции в c (те, которые вы хотите сделать сложными для обратного), скомпилировать их и использовать python boost для импорта скомпилированного кода (плюс вы получите гораздо более быстрое выполнение кода). затем используйте любой инструмент, упомянутый для распространения.
Используя pyinstaller, я нашел лучший метод, использующий ярлык для.exe, а не создание --onefile
. В любом случае, возможно, есть некоторые файлы данных, и если вы используете приложение на основе сайта, ваша программа также зависит от файлов html, js, css. Нет смысла перемещать все эти файлы где-то.. вместо этого, если мы переместим рабочий путь вверх.
Сделайте ярлык для exe, переместите его вверху и установите целевые и начальные пути, как указано, чтобы иметь относительные пути в dist\folder: Target: %windir%\system32\cmd.exe/c start dist\web_wrapper\web_wrapper.exe Start in: "%windir%\system32\cmd.exe/c start dist\web_wrapper\"
Можно переименовать ярлык на все, что переименовано в "GTFS-Manager"
Теперь, когда я дважды щелкаю ярлык, это как если бы я python-запускал файл! Я нашел этот подход лучше, чем --onefile
:
О, не забудьте удалить из папки сборки после создания, сэкономить на размере.
Мне сказали, что PyRun, https://www.egenix.com/products/python/PyRun/, также является опцией.