Распространение приложений Python GUI

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

Какие у меня есть варианты библиотеки графического интерфейса, которые позволяют мне перераспределять мое приложение автономно, предполагая, что у пользователей нет рабочей установки Python и, очевидно, нет графических интерфейсов, которые я использую?

Кроме того, как бы я собирался упаковать все в двоичные файлы разумного размера для каждой целевой ОС? (моими основными целями являются Windows и Mac OS X)

Дополнение: Я смотрел на WxPython, но я нашел много ужасных историй, связанных с упаковкой его с помощью cx_freeze и получением бинарных файлов размером 30 Мбайт +, и никаких реальных советов о том, как на самом деле делать упаковку и насколько заслуживает доверия.

Ответ 1

http://wiki.wxpython.org/CreatingStandaloneExecutables

Он не должен быть таким большим, если вам не удастся включить отладочную сборку wx. Я, кажется, вспоминаю о 4Mb для python.dll и similair для wx.

Ответ 3

Python имеет встроенный инструментарий GUI с именем TKinter, который основан на Tk-библиотеке с языка программирования TCL. Он очень простой и не имеет всех функций, которые вы ожидаете в Windows Forms или GTK, например, но если у вас должен быть инструментарий, независимый от платформы, я не вижу другого выбора, учитывая, что вы также не хотите вырастить так много бинарных файлов.

Tkinter совсем не сложно использовать, поскольку у него нет миллионов виджетов/элементов управления и опций, и это набор инструментов по умолчанию, включенный в большинство дистрибутивов python, по крайней мере, в Windows, OSX и Linux.

GTK и QT красивее и более мощные, но у них есть один большой недостаток для вас: они тяжелы и депонированы для третьих библиотек, особенно GTK, который имеет множество зависимостей, что затрудняет его распространение в вашем программном обеспечении.

Что касается двоичного создания, я знаю, что есть py2exe, который преобразует код python в исполняемый код win32 (.exe), но не уверен, что для OSX что-то похожее. Вы беспокоитесь, потому что люди могли видеть исходный код или просто чтобы вы могли связать все в одном пакете? Если вы просто хотите связать все, что вам не нужно, чтобы создать автономный исполняемый файл, вы можете легко создать установщик:

Создание дистрибутива в python

Это руководство по распределению вашего программного обеспечения, когда оно будет сделано.

Ответ 4

http://Gajim.org для Windows использует python и PyGtk. Вы можете проверить, как они это сделали. Кроме того, PyQt для GUI (и wxpython, упомянутых ранее).

Ответ 5

У меня нет опыта создания автономных приложений для любой платформы, отличной от Windows.

Это сказало:

Tkinter: отлично работает с py2exe. Python Megawidgets ( "библиотека расширений" для Tkinter) отлично работает, но он вызывает фанки с динамическим импортом, поэтому вам нужно объединить все компоненты в большой файл pmw.py и добавить его в свой проект (ну, вы также будете иметь pmwblt.py и pmwcolor.py). Существуют инструкции о том, как это сделать где-нибудь (либо на py2exe wiki, либо в документах PMW). Tix (расширение для Tk, которое вы можете использовать с Tkinter) не работает с py2exe, или, по крайней мере, это был мой опыт около четырех лет назад.

wxPython также отлично работает с py2exe. Я просто проверил приложение, которое у меня есть; весь дистрибутив составил около 11 МБ. Большинство из них были файлами wx и .pyd, но я не вижу, как вы могли этого избежать. Если вы нацелены на Windows XP, вам нужно включить манифест в ваш setup.py, иначе он будет выглядеть уродливым. Подробнее см. это письмо.

Ответ 6

Я сам использовал py2Exe - это очень просто (по крайней мере для небольших приложений).

Ответ 7

Комбинация, с которой я знаком: wxPython, py2exe, upx

Ключом к решению вашей последней проблемы с размером распространения является upx для сжатия DLL. Похоже, они поддерживают исполняемые файлы MacOS. Вы заплатите начальное декомпрессионное наказание, когда DLL загружаются впервые.