Как я могу распространять программы на Python? - PullRequest
91 голосов
/ 13 октября 2009

Мое приложение выглядит так:

main.py
windows/
    __init__.py
    mainwindow.py
    ...
model/
    __init__.py
    orders.py
    ...
resources/
    image1.png
    logo.jpg
    ...

Программа запускается с main.py. Есть ли хороший способ создать из него «окончательное» приложение? Я имею в виду что-то вроде py2exe / py2app, но без копирования интерпретатора / модулей python в приложение, в котором только один исполняемый файл.

Я посмотрел на distutils, но похоже, что он устанавливает программу в каталог Python, что не обычно на платформах, отличных от Linux.

В данный момент я просто копирую всю исходную папку на целевой компьютер и создаю псевдоним для main.pyw в Windows. Некоторые неудобства:

  • Значок является значком Python по умолчанию.
  • Мне нужно создать псевдоним вручную.
  • В моем исходном каталоге много дополнительных файлов, таких как папка управления исходным кодом.
  • Я должен переименовать main.py в main.pyw вручную.
  • Было бы хорошо, если бы на целевом компьютере были только файлы `.pyo *. Для этого нет реальной причины, просто мне не нравятся ненужные файлы.

Как создать хороший автоматический дистрибутив?

  • для окон? (Это единственная платформа, которую я должен поддерживать на данный момент.)
  • для mac?
  • для Linux?

Ответы [ 7 ]

58 голосов
/ 13 октября 2009

Я настоятельно рекомендую Pyinstaller , который поддерживает все основные платформы без проблем. Как и py2exe и py2app, он создает стандартный исполняемый файл для Windows и комплект приложений на OS X, но имеет преимущество в том, что он выполняет фантастическую работу по автоматическому разрешению общих зависимостей и их включению без дополнительных настроек конфигурации.

Также обратите внимание, что если вы развертываете Python 2.6 в Windows, вам следует применить этот патч к транку Pyinstaller.

Вы указали, что вам не нужен установщик, но Inno Setup - это простой в использовании и быстрый выбор для установки платформы Windows.

34 голосов
/ 13 октября 2009

Обычный способ распространения приложений Python - это distutils . Это сделано как для распространения модулей Python библиотечного типа, так и для приложений Python, хотя я не знаю, как это работает в Windows. В любом случае, в Windows вам придется устанавливать Python отдельно, если вы используете distutils.

Я бы порекомендовал вам распространять его с disutils для Linux и Py2exe или чем-то похожим для Windows. Для OS X я не знаю. Если это приложение для конечного пользователя, вы, вероятно, захотите что-то типа образа диска, я не знаю, как это сделать. Но прочитайте этот пост для получения дополнительной информации об этом. Для приложения, созданного для программистов, вы, вероятно, в порядке с установкой типа distutils на OS X тоже.

5 голосов
/ 13 октября 2009

Fredrik Lundh's squeeze.py может создать один файл, который не содержит интерпретатор Python, но вместо этого содержит байт-код. С правильными аргументами вы можете включить другие файлы, модули и т. Д. В файл результатов. Я успешно использовал его в одном проекте. Полученная программа работала на OS X, Linux и Windows без проблем!

PS : на каждой машине должен быть интерпретатор Python, совместимый с байт-кодом, генерируемым squeeze.py. При необходимости вы можете сгенерировать разные версии байт-кода для разных версий Python (просто запустите squeeze.py с верной версией Python).

2 голосов
/ 28 мая 2013

Я могу ошибаться, но разве у IronPython нет встроенного компилятора для Windows?

http://www.ironpython.net

[EDIT]

Попробуйте Cx_Freeze, безусловно, лучший компилятор .py в .exe (плюс несколько .dll), который я когда-либо использовал.

http://cx -freeze.sourceforge.net /

1 голос
/ 06 марта 2019

Я думаю, также стоит упомянуть PEX (учитывая больше внимания к этому вопросу и меньше сам вопрос). Согласно собственному описанию 1004 *:

PEX-файлы представляют собой автономные исполняемые виртуальные среды Python. В частности, они представляют собой тщательно скомпилированные zip-файлы с #!/usr/bin/env python и специальным __main__.py, который позволяет вам взаимодействовать со средой выполнения PEX. Для получения дополнительной информации о приложениях zip см. PEP 441 .

Я наткнулся на это, когда прочитал обзор упаковки для python . Они разместили эту красивую картинку там: enter image description here

Подводя итог: если вы можете позволить себе полагаться на установку Python на целевой машине, используйте PEX для создания самодостаточного «исполняемого файла», который, вероятно, будет иметь меньший размер файла, чем исполняемый файл, созданный, например, PyInstaller. *

1 голос
/ 13 октября 2009

Если вы распространяете в Windows, используйте установщик , чтобы установить все необходимые файлы / интерпретаторы, что вам нужно.Раздайте файл setup.exe.Это лучший способ для окон.В противном случае пользователи будут жаловаться.

0 голосов
/ 20 июня 2018

Самый удобный * кроссплатформенный способ распространения настольных приложений Python - это использование кроссплатформенного менеджера пакетов conda. Есть несколько инструментов, которые его используют:

  • Miniconda-Install - сценарии powershell / bash, которые автоматически загружают Miniconda и создают изолированную среду conda для приложения. Поддерживает pip, но, похоже, не поддерживается и имеет проблемы с загрузкой https.
  • Anaconda Project и (conda) конструктор от Continuum. Оба используют conda. (conda) конструктор, кажется, может создавать автономные установщики и даже установщик NSIS под Windows, но не поддерживает pip. Кажется, ведут себя как установщики Anaconda / Miniconda.
  • PyAppShare - конечный пользователь сначала устанавливает Miniconda / Anaconda (как среда выполнения). Затем одиночный пакетный / bash-скрипт создает изолированную среду conda из спецификации yaml. Приложение также представляет собой пакет conda / pip, который устанавливается в среду и создается исполняемая точка входа. Кросс-платформенные ярлыки рабочего стола и программ создаются автоматически. Они активируют среду и запускают приложение. Поддерживает пип.

* Наиболее удобный для разработчика. Достаточно удобно для конечного пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...