私はPythonアプリケーションを構築していて、クライアントにPythonとモジュールを強制的にインストールさせたくありません。私は自分のアプリケーションをクローズドソースにしたいとも思っています。
それでは、Pythonスクリプトをスタンドアロンの実行可能ファイルにコンパイルする方法はありますか?
PyInstaller を使用すると、Pythonプログラムをスタンドアロンの実行可能ファイルとしてパッケージ化できます。 Windows、Linux、Macで動作します。
PyInstallerクイックスタート
PyPIからPyInstallerをインストールします。
pip install pyinstaller
プログラムのディレクトリに移動して実行します。
pyinstaller yourprogram.py
これは
dist
というサブディレクトリにバンドルを生成します。より詳細なチュートリアルについては、 マニュアル を参照してください。
あなたは Nuitka を調査したいと思うかもしれません。 Pythonのソースコードを受け取り、それをC++ API呼び出しに変換します。それからそれは実行可能なバイナリ(Linux上のELF)にコンパイルされます。これは数年前から出回っており、さまざまなバージョンのPythonをサポートしています。
あなたがそれを使用するなら、あなたはおそらくまた性能改善を得るでしょう。おすすめです。
そして3番目のオプションは cx_Freeze
で、これはクロスプラットフォームです。
Python 2.7を使用してWindows上でスタンドアロンファイルを作成することに関する有用な情報をいくつかまとめたいと思います。
py2exe を使用しましたが、動作しますが、いくつか問題がありました。
それは、64ビットWindowsで単一のファイルを作成することに関するいくつかの問題を示しました: py2exeでbundle_files = 1を使用することは動作していません ;
それが機能するためにはsetup.pyファイルを作成する必要があります。 http://www.py2exe.org/index.cgi/Tutorial#Step2 ;
セットアップファイルにパッケージをインポートすることで解決しなければならない依存関係に問題がありました。
私はそれをPyQtと一緒に動かすことができませんでした。
この最後の理由から、 PyInstaller http://www.pyinstaller.org/ を試してみました。
私の意見では、それははるかに優れています:
たとえば、次の行を使用して.batファイルを作成することをお勧めします(pyinstaller.exeはWindowsパスにある必要があります)。
pyinstaller.exe --onefile MyCode.py
他のオプションの中でも、単一のファイルを作成できます( https://pyinstaller.readthedocs.io/en/stable/usage.html#options )。
私はこのレシピを使って解決されたPyInstallerとマルチプロセッシングパッケージを使うことでたった一つの問題を抱えていました: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing 。
ですから、少なくともpython 2.7では、PyInstallerがより簡単でシンプルなオプションであると私は思います。
はい、Pythonスクリプトをスタンドアロンの実行可能ファイルにコンパイルすることは可能です。
PyInstaller を使用して、Pythonプログラムをスタンドアロンの実行可能ファイルに変換できます。 Windows 、 Linux 、 Mac OS X 、 FreeBSD 、 Solaris および _ aix _ 。それは推奨コンバータの一つです。
py2exe はPythonスクリプトをWindowsプラットフォームでのみ実行可能ファイルに変換します。
Cython はPythonプログラミング言語と拡張Cythonプログラミング言語の両方のための静的コンパイラです。
あなたは py2exe を好むかもしれません。また、Linuxでそれを行うための情報がそこにあります。
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()
)
私は pyinstaller を推奨します。python 2.3 - 2.7のような下位互換性のためです。
py2exe には、Python 2.6が必要です。
Python 3.2スクリプトの場合、唯一の選択はCxfreezeです。そうでなければそれは動作しませんソースからそれを構築します。
Python 2.xでは、ライブラリも出力するCxFreezeとは異なり、pythonプログラムを単一の実行可能ファイルにパッケージ化できるので、pyinstallerをお勧めします。
py2exeはあなたが欲しいexeファイルを作るでしょうが、あなたはあなたがあなたの新しいexeファイルを使うつもりであるマシン上にMSVCR90.dllの同じバージョンを持っている必要があります。詳細については http://www.py2exe.org/index.cgi/Tutorial を参照してください。
@ https://wiki.python.org/moin/DistributionUtilities にリストされている配布ユーティリティのリストを見つけることができます。
私は bbfreeze を使用していますが、それは非常にうまく機能しています(それでもpython 3をサポートしています)。
厳密にはpythonコードをパッケージ化していませんが、googleから grumpy が追加されています。これはコードをGoに変換します。 python C apiをサポートしていないので、すべてのプロジェクトで機能するわけではありません。
Cythonを使ってcに変換し、gccでコンパイルしてリンクします。もう1つの方法は、コア関数をc(逆にしたくないもの)にし、それらをコンパイルしてpython boostを使用してコンパイル済みコードをインポートすることです(さらに、コード実行がはるかに高速になります)。それから配布するために言及された任意のツールを使用してください。
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
アプローチよりも優れていることがわかりました。
ああ、ビルド後にビルドフォルダを削除することを忘れないでください、サイズを節約します。
PyRun、 https://www.egenix.com/products/python/PyRun/ もオプションです。
私は pyinstaller - が特に好きです。
pyinstaller --onefile --windowed myscript.py
それはdist /フォルダに一つの* .exeファイルを作成します。