web-dev-qa-db-ja.com

Pythonスクリプトをスタンドアロンの実行可能ファイルにして、依存関係なしに実行する方法は?

私はPythonアプリケーションを構築していて、クライアントにPythonとモジュールを強制的にインストールさせたくありません。私は自分のアプリケーションをクローズドソースにしたいとも思っています。

それでは、Pythonスクリプトをスタンドアロンの実行可能ファイルにコンパイルする方法はありますか?

539
Jeff

py2exe を既に回答済みとして使用し、 cython を使用して、.pyのキー.pycファイル、Windowsの.dllおよびLinuxの.soなどのCコンパイル済みファイルを変換できます。一般的な.pyoおよび.pycファイルよりも(そしてパフォーマンスも向上します!)

203
neurino

PyInstaller を使用すると、Pythonプログラムをスタンドアロンの実行可能ファイルとしてパッケージ化できます。 Windows、Linux、Macで動作します。

PyInstallerクイックスタート

PyPIからPyInstallerをインストールします。

pip install pyinstaller

プログラムのディレクトリに移動して実行します。

pyinstaller yourprogram.py

これはdistというサブディレクトリにバンドルを生成します。

より詳細なチュートリアルについては、 マニュアル を参照してください。

187

あなたは Nuitka を調査したいと思うかもしれません。 Pythonのソースコードを受け取り、それをC++ API呼び出しに変換します。それからそれは実行可能なバイナリ(Linux上のELF)にコンパイルされます。これは数年前から出回っており、さまざまなバージョンのPythonをサポートしています。

あなたがそれを使用するなら、あなたはおそらくまた性能改善を得るでしょう。おすすめです。

72
cdarke

そして3番目のオプションは cx_Freeze で、これはクロスプラットフォームです。

25
Katriel

Python 2.7を使用してWindows上でスタンドアロンファイルを作成することに関する有用な情報をいくつかまとめたいと思います。

py2exe を使用しましたが、動作しますが、いくつか問題がありました。

この最後の理由から、 PyInstaller http://www.pyinstaller.org/ を試してみました。

私の意見では、それははるかに優れています:

  • それは使いやすいです。

たとえば、次の行を使用して.batファイルを作成することをお勧めします(pyinstaller.exeはWindowsパスにある必要があります)。

pyinstaller.exe --onefile MyCode.py

ですから、少なくともpython 2.7では、PyInstallerがより簡単でシンプルなオプションであると私は思います。

23
Diego

はい、Pythonスクリプトをスタンドアロンの実行可能ファイルにコンパイルすることは可能です。

PyInstaller を使用して、Pythonプログラムをスタンドアロンの実行可能ファイルに変換できます。 Windows Linux Mac OS X FreeBSD Solaris および _ aix _ 。それは推奨コンバータの一つです。

py2exe はPythonスクリプトをWindowsプラットフォームでのみ実行可能ファイルに変換します。

Cython はPythonプログラミング言語と拡張Cythonプログラミング言語の両方のための静的コンパイラです。

20
fury.slay

あなたは py2exe を好むかもしれません。また、Linuxでそれを行うための情報がそこにあります。

17
user237419

Py2exeを使用してください。

 from distutils.core import setup
 import py2exe

 from distutils.filelist import findall
 import matplotlib

 setup(
       console=['PlotMemInfo.py'],

       options={
                'py2exe': {
                'packages' : ['matplotlib'],
            'dll_excludes': ['libgdk-win32-2.0-0.dll',
                                 'libgobject-2.0-0.dll',
                 'libgdk_pixbuf-2.0-0.dll']
                          }
                },
       data_files = matplotlib.get_py2exe_datafiles()
     )
13
Anand

私は pyinstaller を推奨します。python 2.3 - 2.7のような下位互換性のためです。
py2exe には、Python 2.6が必要です。

9
yantaq

Python 3.2スクリプトの場合、唯一の選択はCxfreezeです。そうでなければそれは動作しませんソースからそれを構築します。

Python 2.xでは、ライブラリも出力するCxFreezeとは異なり、pythonプログラムを単一の実行可能ファイルにパッケージ化できるので、pyinstallerをお勧めします。

8
ravi.chunduru

py2exeはあなたが欲しいexeファイルを作るでしょうが、あなたはあなたがあなたの新しいexeファイルを使うつもりであるマシン上にMSVCR90.dllの同じバージョンを持っている必要があります。詳細については http://www.py2exe.org/index.cgi/Tutorial を参照してください。

6
Belial

@ https://wiki.python.org/moin/DistributionUtilities にリストされている配布ユーティリティのリストを見つけることができます。

私は bbfreeze を使用していますが、それは非常にうまく機能しています(それでもpython 3をサポートしています)。

6
Joe

厳密にはpythonコードをパッケージ化していませんが、googleから grumpy が追加されています。これはコードをGoに変換します。 python C apiをサポートしていないので、すべてのプロジェクトで機能するわけではありません。

4
freeformz

Cythonを使ってcに変換し、gccでコンパイルしてリンクします。もう1つの方法は、コア関数をc(逆にしたくないもの)にし、それらをコンパイルしてpython boostを使用してコンパイル済みコードをインポートすることです(さらに、コード実行がはるかに高速になります)。それから配布するために言及された任意のツールを使用してください。

2
F.Moure

Pyinstallerを使って、--onefileを作るよりも.exeへのショートカットを使うより良い方法を見つけました。とにかく周りにはおそらくいくつかのデータファイルがあり、あなたがサイトベースのアプリケーションを実行しているならば、あなたのプログラムはhtml、js、cssファイルにも依存します。これらすべてのファイルをどこかに移動しても意味がありません。代わりに、作業パスを上に移動した場合はどうなりますか。

Exeファイルへのショートカットを作成し、一番上に移動して、ターゲットパスと開始パスを指定されたとおりに相対パスをdist\folderに設定します。Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\"ショートカットの名前を「GTFS-Manager」に変更できます。
ショートカットをダブルクリックすると、ファイルをpythonで実行したかのようになります。私はこのアプローチが--onefileアプローチよりも優れていることがわかりました。

  1. Onefileの場合、win7 OS用の.dllが見つからないという問題があります。これには事前のインストールなどが必要です。あくび。通常複数のファイルでビルドするのであれば、そのような問題はありません。
  2. 私のpythonスクリプトが使うすべてのファイル(それはトルネードウェブサーバを展開していて、そこにあるためにはフリークのウェブサイト全体の価値のあるファイルが必要です!)はどこにも移動する必要はありません。
  3. 私は実際にはubuntu(python3 myfile.pyを実行)とwindows(ショートカットをダブルクリック)でこのまったく同じフォルダを使うことができます。
  4. データファイルなどをインクルードするために.specファイルを過度に複雑にハッキングする必要はありません。

ああ、ビルド後にビルドフォルダを削除することを忘れないでください、サイズを節約します。

2
Nikhil VJ

PyRun、 https://www.egenix.com/products/python/PyRun/ もオプションです。

私は pyinstaller - が特に好きです。

pyinstaller --onefile --windowed myscript.py

それはdist /フォルダに一つの* .exeファイルを作成します。

0
cslotty