Как я могу распространять программы python?

Мое приложение выглядит следующим образом:

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 в окнах. Некоторые неудобства:

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

http://www.ironpython.net

[EDIT]

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

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

Ответ 5

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