Как сделать скрипт Python исполняемый файл без зависимостей?

Я создаю приложение Python и не хочу заставлять своих клиентов устанавливать Python и модули. Я также хочу сделать свое приложение закрытым.

Итак, есть ли способ скомпилировать скрипты Python в автономные исполняемые файлы?

16 ответов


можно использовать py2exe как уже ответили и используют на Cython преобразовать ваш ключ .py файлы .pyc, C скомпилированные файлы, например .dll в Windows и .so в linux гораздо сложнее вернуться, чем обычно .pyo и .pyc файлы (а также увеличение производительности!)


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

PyInstaller Quickstart

установить PyInstaller из PyPI:

pip install pyinstaller

перейдите в каталог вашей программы и запустите:

pyinstaller yourprogram.py

это создаст пакет в подкаталоге с именем dist.

более подробное руководство см. В руководство.


возможно, вы захотите исследовать Nuitka. Он принимает исходный код python и преобразует его в вызовы API C++. Затем он компилируется в исполняемый двоичный файл (ELF на Linux). Он существует уже несколько лет и поддерживает широкий спектр версий Python.

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


и третий вариант-это cx_Freeze, который является кросс-платформенным.


Я хотел бы собрать полезную информацию о создании автономных файлов в windows с помощью Python 2.7.

я использовал py2exe и он работает, но у меня были некоторые проблемы.

  • Он показал некоторые проблемы для создания отдельных файлов в Windows 64 бит: использование 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

Итак, я думаю, что, по крайней мере, для python 2.7, лучшим и более простым вариантом является PyInstaller.


да, можно скомпилировать скрипты Python в автономный исполняемый файл.

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

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, но теперь также ворчун из Google, которые transpiles код, чтобы пойти. Он не поддерживает api python C, поэтому он может работать не для всех проектов.


используйте Cython для преобразования в c, компиляции и связи с gcc. Другой может быть, сделать основные функции в c (те, которые вы хотите сделать трудными для обратного), скомпилировать их и использовать python boost для импорта скомпилированного кода ( плюс вы получите гораздо более быстрое выполнение кода). затем используйте любой упомянутый инструмент для распространения.


Мне сказали, что PyRun, https://www.egenix.com/products/python/PyRun/, это тоже вариант.


используя pyinstaller, я нашел лучший метод, используя ярлык .ехе, а не делать --onefile. В любом случае, вероятно, есть некоторые файлы данных, и если вы используете приложение на основе сайта, ваша программа также зависит от файлов html, js, css. Нет смысла куда-то переносить все эти файлы.. вместо этого, что если мы переместим Рабочий путь вверх.

сделайте ярлык для exe, переместите его сверху и установите целевые и начальные пути, как указано, чтобы относительные пути папка dist\: 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 одним из:

  1. в случае onefile есть проблема с a .dll отсутствует для ОС win7, которая нуждается в некоторой предварительной установке и т. д. Зевать. При обычной сборке с несколькими файлами таких проблем нет.
  2. все файлы, которые использует мой скрипт python (он развертывает торнадо веб-сервер и нужен целый чертов веб-сайт стоит файлов, чтобы быть там!) не нужно никуда перемещаться: я просто создаю ярлык сверху.
  3. Я действительно могу использовать эту же папку в ubuntu (запустить python3 myfile.py) и windows (дважды щелкните ярлык).
  4. мне не нужно беспокоиться о слишком сложном взломе .файл спецификаций для включения файлов данных и т. д.

о, не забудьте удалить папку сборки после построения, будет экономьте на размере.