1. ホーム
  2. python

[解決済み] Python プロジェクトから単一の実行ファイルを作成する

2022-05-12 02:46:58

質問

Pythonプロジェクトから1つの実行ファイルを作成したいです。 ユーザーはPythonがインストールされていなくても、それをダウンロードして実行することができるはずです。 私が単にパッケージを配布していた場合、私はそれを構築して配布するためにpip、wheel、およびPyPIを使用することができますが、これはユーザーがPythonを持っていて、パッケージをインストールする方法を知っていることを必要とします。 Pythonプロジェクトから自己完結型の実行ファイルをビルドするには何を使えばよいのでしょうか?

どのように解決するのですか?

一般的なものをいくつか紹介します。前回の編集時(2021年7月)に活発にメンテナンスされているプロジェクトだけを載せています。

特に断りのない限り、以下に列挙するすべてのプログラムは、実行するオペレーティングシステム専用の exe を生成します。たとえば、Windows で Pyinstaller を実行すると Windows 用の exe が生成されますが、Linux で Pyinstaller を実行すると Linux 用の exe が生成されます。もし、複数のOS用のexeを作成したい場合は、仮想マシンなどを利用することを検討する必要があります。 ワイン .


以下のプログラムはすべて同じように動作します -- Pythonとあなたのプログラムをバンドルし、効果的に組み合わせて実行ファイルを生成します。


もちろん、それだけが唯一の方法というわけではありません。

  • pynsist:

    ウェブサイト || レポ || PyPi

    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です。

    ウェブサイト || レポ || PyPi

    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 プログラムを実行ファイルに変換することが、必ずしもコードを配布する唯一の方法であるとは限らないということを述べています。他にどのようなオプションがあるかについては、以下のリンクを参照してください。