Я создаю приложение 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
.Для более подробного ознакомления см. Руководство .
Вы можете исследовать Нуитку . Он берет исходный код Python и преобразует его в вызовы API C ++. Затем он компилируется в исполняемый двоичный файл (ELF в Linux). Он существует уже несколько лет и поддерживает широкий спектр версий Python.
Вероятно, вы также получите улучшение производительности, если будете его использовать. Рекомендуемые.
Я хотел бы собрать некоторую полезную информацию о создании автономных файлов в 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 Path):
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.
--onefile
Флаг не поможет вам сделать это портативный на Windows, так как исполняемый файл все еще хочет , чтобы связь с api-ms-win-crt-runtime-l1-1-0.dll
библиотекой (или / и другие) , которые должны быть установлены через vcredist
пакет. Таким образом, зависимость все еще существует и должна быть установлена до запуска.
Да, есть возможность компилировать скрипты Python в отдельный исполняемый файл.
PyInstaller может использоваться для преобразования программ Python в автономные исполняемые файлы под Windows , Linux , Mac OS X , FreeBSD , Solaris и AIX . Это один из рекомендуемых конвертеров.
py2exe преобразует скрипты Python в исполняемый файл только на платформе Windows.
Cython является статическим компилятором как для языка программирования Python, так и для расширенного языка программирования Cython.
И третий вариант - cx_Freeze
кроссплатформенный.
cx_Freeze
с конца 2017 года на pypi нет перечисленных выпусков. Был ли этот проект заброшен?
вам может понравиться 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 - особенно "оконный" вариант:
pyinstaller --onefile --windowed myscript.py
Он создаст один файл * .exe в папке dist /.
Я также рекомендую pyinstaller
для лучшей обратной совместимости, такой как python 2.3 - 2.7.
для py2exe у вас должен быть python 2.6
Для скриптов Python 3.2 единственным выбором является Cxfreeze. Соберите его из источников, иначе он не будет работать.
Для python 2.x я предлагаю pyinstaller, поскольку он может упаковать программу на python в один исполняемый файл, в отличие от CxFreeze, который выводит также библиотеки.
py2exe сделает исполняемый файл, который вы хотите, но вам нужно иметь ту же версию MSVCR90.dll на компьютере, на котором вы собираетесь использовать новый исполняемый файл. См. Http://www.py2exe.org/index.cgi/Tutorial для получения дополнительной информации.
Вы можете найти список утилит распространения, перечисленных в @ https://wiki.python.org/moin/DistributionUtilities .
Я использую bbfreeze, и он работал очень хорошо (хотя поддержка Python 3 еще не была).
.so
файлов или скопирует файлы .egg напрямую, и все они будут присутствовать в одном каталоге (или как один файл). Там не требуется установка.
Используя pyinstaller, я нашел лучший способ, используя ярлык для .exe вместо создания --onefile
. В любом случае, вероятно, есть некоторые файлы данных, и если вы запускаете приложение для сайта, то ваша программа также зависит от файлов html, js, css. Нет смысла перемещать все эти файлы куда-нибудь ... вместо этого, что если мы переместим рабочий путь вверх.
Создайте ярлык для исполняемого файла, переместите его сверху и задайте пути назначения и запуска, как указано, чтобы относительные пути шли в 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
который:
О, не забудьте удалить папку сборки после сборки, сэкономите на размере.
Используйте Cython, чтобы конвертировать в c, компилировать и связывать с gcc. Другой может быть сделать основные функции в c (те, которые вы хотите сделать сложными для реверсии), скомпилировать их и использовать python boost для импорта скомпилированного кода (плюс вы получите намного более быстрое выполнение кода). затем используйте любой инструмент, упомянутый для распространения.
Мне сказали, что PyRun, https://www.egenix.com/products/python/PyRun/ , также является опцией.