Python GUIアプリケーションの再配布
-
03-07-2019 - |
質問
中規模のデスクトップGUIアプリケーションを開発する必要があります。できれば時間の制約からPythonを選択言語として使用してください。
ユーザーに動作するPythonインストールがなく、使用しているGUIライブラリもないことを前提として、アプリケーションをスタンドアロンで再配布できるGUIライブラリの選択肢は何ですか?
また、ターゲットOSごとに合理的なサイズのバイナリですべてをパッケージ化するにはどうすればよいですか? (私の主なターゲットはWindowsとMac OS Xです)
追加: 私はWxPythonを見てきましたが、cx_freezeでパッケージ化し、30 MB以上のバイナリを取得するという恐ろしい話をたくさん見つけました。そうです。
解決
http://wiki.wxpython.org/CreatingStandaloneExecutables
wxのデバッグビルドを含めることができなければ、それほど大きくはなりません。 python.dllの場合は4Mb、wxの場合はsimilairについて記憶しているようです。
他のヒント
これが役立つ場合があります:
Pythonには、 TKinter という名前のGUIツールキットが組み込まれており、TCLプログラミングのTkライブラリに基づいています。言語。これは非常に基本的であり、たとえばWindows FormsやGTKに期待するすべての機能を備えているわけではありませんが、プラットフォームに依存しないツールキットが必要な場合は、バイナリをあまり大きくしたくないことを考慮して、他の選択肢はありません
Tkinterは何百万ものウィジェット/コントロールとオプションを持たず、少なくともWindows、OSX、LinuxのほとんどのPythonディストリビューションに含まれているデフォルトのツールキットであるため、使用するのは難しくありません。
GTK および QT はよりきれいで強力ですが、1つ大きな欠点があります。重いため、3番目のライブラリに依存します。特にGTKには配布が少し難しくなる多くの依存関係がありますソフトウェアに埋め込みます。
バイナリ作成に関しては、Pythonコードをwin32実行可能コード(.exe)に変換するpy2exeがあることは知っていますが、OSXに似たものがあるかどうかはわかりません。あなたは人々がソースコードを見ることができるので心配していますか、それともあなたはすべてを単一のパッケージにまとめることができますか?スタンドアロンの実行可能ファイルを作成する必要がないすべてをバンドルしたい場合は、インストーラーを簡単に作成できます。
これは、ソフトウェアの完了時にソフトウェアを配布する方法に関するガイドです。
http://Gajim.org はpythonとPyGtkを使用します。あなたは彼らがそれをどのようにしたかを確認できます。また、GUI用のPyQt(および前述のwxpython)もあります。
Windows以外のプラットフォーム用にスタンドアロンアプリを構築した経験はありません。
それは言った:
Tkinter:はpy2exeで正常に動作します。 Python Megawidgets(Tkinter用の「拡張ライブラリ」)も正常に機能しますが、動的なインポートでファンキーなことを行うため、すべてのコンポーネントを大きなファイル「pmw.py」に結合する必要があります。プロジェクトに追加します(まあ、pmwblt.pyとpmwcolor.pyもあります)。 py2exe wikiまたはPMWドキュメントのいずれかで、これを行う方法についての指示があります。 Tix(Tkinterで使用できるTkの拡張機能)はpy2exeでは機能しません。少なくとも4年前の私の経験でした。
wxPython もpy2exeで正常に動作します。持っているアプリをチェックしました。配布全体は約11MBになりました。そのほとんどはwx DLLと.pydファイルでしたが、それをどのように回避するかわかりません。 Windows XPをターゲットにしている場合は、setup.pyにマニフェストを含める必要があります。そうしないと、見栄えが悪くなります。詳細については、このメールをご覧ください。
自分でpy2Exeを使用しました-本当に簡単です(少なくとも小さなアプリの場合)。
私がよく知っている組み合わせ:wxPython、py2exe、upx
ディストリビューションのサイズに関する最後の懸念を解決する鍵は、 upx を使用してDLLを圧縮することです。 MacOS実行可能ファイルをサポートしているようです。 DLLが最初にロードされるときに、最初の解凍ペナルティを支払います。