[解決済み] Python プロジェクトから単一の実行ファイルを作成する
質問
Pythonプロジェクトから1つの実行ファイルを作成したいです。 ユーザーはPythonがインストールされていなくても、それをダウンロードして実行することができるはずです。 私が単にパッケージを配布していた場合、私はそれを構築して配布するためにpip、wheel、およびPyPIを使用することができますが、これはユーザーがPythonを持っていて、パッケージをインストールする方法を知っていることを必要とします。 Pythonプロジェクトから自己完結型の実行ファイルをビルドするには何を使えばよいのでしょうか?
どのように解決するのですか?
一般的なものをいくつか紹介します。前回の編集時(2021年7月)に活発にメンテナンスされているプロジェクトだけを載せています。
特に断りのない限り、以下に列挙するすべてのプログラムは、実行するオペレーティングシステム専用の exe を生成します。たとえば、Windows で Pyinstaller を実行すると Windows 用の exe が生成されますが、Linux で Pyinstaller を実行すると Linux 用の exe が生成されます。もし、複数のOS用のexeを作成したい場合は、仮想マシンなどを利用することを検討する必要があります。 ワイン .
以下のプログラムはすべて同じように動作します -- Pythonとあなたのプログラムをバンドルし、効果的に組み合わせて実行ファイルを生成します。
-
PyInstallerです。
Windows, Mac, Linux 上の Python 3.5 - 3.9 をサポートします。
-
cx_Freeze。
Windows, Mac, Linux 上の Python 3.6 - 3.9 をサポートします。
-
py2exeです。
Python 3.6 - 3.9 を Windows のみでサポートします。
-
py2appです。
Mac でのみ、Python 2.7 (?) と Python 3 (?) をサポートします。サポートされる Python の正確なバージョンは、現在文書化されていません。
もちろん、それだけが唯一の方法というわけではありません。
-
pynsist:
PynsistはあなたのプログラムのためにWindowsインストーラを作成し、あなたのコードにPythonをバンドルする代わりにユーザーのコンピュータに直接インストールし、あなたのPythonスクリプトにリンクするショートカットを作成します。
pynsist ツール自体は実行するために Python 3.5+ を必要としますが、あなたのプログラムに任意のバージョンの Python をバンドルすることをサポートします。
PynsistはWindowsインストーラのみを作成しますが、Windows、Mac、Linuxから実行することができます。参照 FAQ をご覧ください。
-
ヌイグルミです。
ウェブサイト || レポ (Githubミラー) || PyPi
Nuitkaは、あなたのPythonコードを文字通りコンパイルし、あなたのコードを高速化するためにexeを生成します(他のプロジェクトが単にPythonを含むのとは対照的です)。副次的な効果として、あなたは配布可能な便利なexeを得ることができます。注意点としては C++ コンパイラ が必要です。
Windows、Mac、Linux 上の Python 2.6 - 2.7 および Python 3.3 - 3.9 をサポートします。
-
cythonです。
CythonはPythonコンパイラという点で、Nuitkaと似ています。しかし、あなたのコードを直接コンパイルするのではなく、Cにコンパイルします。 に変換することができます。 . あなたのシステムで利用可能なCコンパイラが必要です。
Python 2.6 - 2.7 および Python 3.3 - 3.9 を Windows、Mac、Linux でサポートします。
私の個人的な好みとしては、PyInstallerを使うことです。これは、私にとって立ち上げるのが最も簡単で、numpyやpygameのようなさまざまな人気のあるライブラリとうまく動作するように設計されていて、さまざまなOSやPythonのバージョンと素晴らしい互換性を持っています。
しかし、私はcx_Freezeを使用して、それほど困難なく様々なexeをビルドすることに成功しました。
私はまだ pynist、Nuitka、Cython を広範囲に試す機会がありませんが、これらはかなり興味深く革新的なソリューションのように思われます。最初のプログラム群を使用して問題が発生した場合、これら 3 つのうち 1 つを試してみる価値があるかもしれません。これらのプログラムは Pyinstaller/cx_freeze スタイルのプログラムとは根本的に異なる動作をするので、最初のグループが失敗するような奇妙なエッジケースで成功する可能性があります。
特に、pynist はコードを完全に配布するという問題全体を横取りする良い方法だと思います。Mac と Linux にはすでに Python のネイティブサポートがあり、Windows に Python をインストールすることが純粋に最もクリーンな解決策になるかもしれません。(欠点は、今、あなたはPythonの複数のバージョンをターゲットにし、ライブラリをインストールすることを心配する必要があることです。)。
Nuitka と Cython は (私の限られた経験では) かなりうまく動作するようです。繰り返しますが、私自身はそれらを広範囲にテストしていないので、私の主な観察は、それらが "freeze" スタイルのプログラムよりも exe を生成するのに非常に時間がかかるように見えるということです。
これらのことは、Python プログラムを実行ファイルに変換することが、必ずしもコードを配布する唯一の方法であるとは限らないということを述べています。他にどのようなオプションがあるかについては、以下のリンクを参照してください。
関連
-
Python jiabaライブラリの使用方法について説明
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 億の相対的輸入
-
[解決済み] Pythonとpip、利用可能なパッケージのすべてのバージョンをリストアップ?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python百行で韓服サークルの画像クロールを実現する
-
Pythonショートビデオクローラーチュートリアル
-
Pythonの@decoratorsについてまとめてみました。
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み] Pythonスクリプトをスタンドアロンで実行できるようにするにはどうしたらいいですか?[重複しています。]