Pythonスクリプトのスタンドアロン実行可能ファイルを依存関係なしで実行するにはどうすればよいですか?


706

私はPythonアプリケーションを構築していますが、クライアントにPythonとモジュールのインストールを強制したくありません。

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


307
「クライアントにPythonとモジュールのインストールを強制したくない」と言っている質問の一部。それはクライアントがそれを行うことができないとは言いません、それは開発者が彼らにそうすることを要求したくないと言います。ここでポイントを議論する意味はありません。クライアントが自分で話すためにSOを読んでいないからです。YouTubeを見るだけのFlash開発環境や、数独をプレイするC開発環境、またはPythonで書かれたAngry Birdsのバージョンを実行するPython開発環境をインストールしたくありません。これが、再配布可能なランタイムの目的です。
デイブ

回答:


243

既に回答されているようにpy2exeを使用し、cythonを使用して、WindowsやLinux などのCコンパイル済みファイルでキー.pyファイルを変換.pycできます。一般的なファイルやファイルよりも元に戻すのは非常に困難です(パフォーマンスも向上します)。.dll.so.pyo.pyc


1
ご回答ありがとうございます。私はCythonを検討しましたが、コンパイルされた実行可能ファイルを実行するにはPythonが必要なようです。Cythonを使用してスクリプトを.pycにコンパイルするということですか?(Cythonにそのような機能があるかどうかは知りませんでした)
Jeff

9
私はあなたが持っている意味二つの問題クローズドソースと無depsのを:。クローズドソースの場合は、Cythonを使用してCライブラリで重要なコードをコンパイルします。no-depsの場合は、py2exeを使用し、.pyd(cythonコンパイル済み)ファイルを含む実行可能ファイルを作成します。
ニューリノ2011年

7
ライブラリ(numpy、scipy、matplotlib)についてどうしますか?たとえば、クライアントがmatplotlibのginput()関数を、コンピューターにインストールせずに実行可能ファイルからどのように使用できるでしょうか。
chimpsarehungry

@chimpsarehungry静的リンクについてはどうですか?
ブレーデンベスト

11
最後のリリースは2008年のようですが、これはまだ維持されていますか?
Zitrax

302

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

PyInstallerクイックスタート

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

pip install pyinstaller

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

pyinstaller yourprogram.py

これにより、というサブディレクトリにバンドルが生成されdistます。

詳細なウォークスルーについては、マニュアルを参照してください。


10
pyinstallerが単一の.exeファイルにコンパイルできることは注目に値します。また、それが実行されているOSで、その実行可能ファイルを作成ます。つまり、Windows 実行する .exeになります
Richard de Wit

2
@ ItayMoav-Malimovka彼らは、Python 3を参照するの支援に取り組んでいますgithub.com/pyinstaller/pyinstaller/tree/python3
PhoneixS 2015年

3
@GeenHenkが言ったように、Windowsで「コンパイル」すると、exeが作成されますが、LinuxでWindows用にコンパイル(exeを作成)したり、WindowsでLinux実行可能ファイルを作成したりすることはできません。実行しているプラ​​ットフォームの実行可能ファイルのみを作成できます。(Linuxでは、wineを使用してこれをだますことができます)
PhoneixS

14
「pyinstaller」の使用は「py2exe」よりもはるかに簡単です。numpy、pandasなど、あらゆる依存関係を処理し、作業プラットフォーム上で単一の実行可能ファイルを提供します!
16年

12
まさに私が探していたもののようです。そして今、Python 3をサポートしています!ありがとう:)
Daniel Gruszczyk

83

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

使用すると、おそらくパフォーマンスも向上します。オススメです。


5
Nuitkaは素晴らしいツールです。使用する必要はありません。私が指摘するのは1つだけです-それはLinuxだけに限定されているわけではありません-それはクロスプラットフォームです -それを使用するもう1つの理由です。
sjaustirni 2014年

5
NuitkaはPython 2.6、2.7、3.2、3.3、および3.4​​で動作し、クロスプラットフォーム:(Linux、FreeBSD、NetBSD、MacOS X、およびWindows(32/64ビット)です。その他のプラットフォームでも動作します。アーキテクチャ:x86、 x86_64(amd64)、およびarm。他のアーキテクチャもそのまま使用できます。)
Jonathan Hartley

最近の3.6ではサポートされていません
。Windowsで

macOS High Sierra + Python 3.5.2のチャームのように動作します。ありがとうございました!
アンソニーL.17年

これはスタンドアロンの実行可能ファイルを作成しますか?

31

Python 2.7を使用してWindowsでスタンドアロンファイルを作成するための有用な情報をまとめたいのですが。

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

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

私の意見では、次の理由からはるかに優れています。

  • 使いやすいです。

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

pyinstaller.exe --onefile MyCode.py

ですから、少なくともpython 2.7の場合、PyInstallerがより優れたシンプルなオプションだと思います。


3
--onefile実行可能ファイルapi-ms-win-crt-runtime-l1-1-0.dllは、vcredistパッケージを介してインストールする必要のあるライブラリー(または他のライブラリー)とリンクする必要があるため、このフラグはWindowsでの移植性を高めるのに役立ちません。したがって、依存関係はまだ存在しており、実行前にインストールする必要があります。
Andry

27

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

PyInstallerを使用すると、WindowsLinuxMac OS XFreeBSDSolarisAIXで Pythonプログラムをスタンドアロンの実行可能ファイルに変換できます。これは、推奨されるコンバーターの1つです。

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

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


2
これをありがとう。私はpy2exeを使用していましたが、アイコンをまったく使用できませんでした。PyInstallerが初めて動作し、見栄えがする!
Chud37

LinuxおよびmacOSのWindowsからスタンドアロンの実行可能ファイルを作成できますか?または、LinuxとmacOSをVirtualBoxにインストールする必要がありますか?ラップトップに十分な空き容量がありません。
8Observer8

1
:私はここにドキュメントの私の質問に答えを見つけることがpyinstaller.readthedocs.io/en/stable/...
8Observer8

26

3つ目のオプションはcx_Freeze、クロスプラットフォームのです。


1
こちらは2019年2月cx_Freezeです。2017年末以降、pypiのリリースはリストされていません。このプロジェクトは中止されましたか?
user9074332

17

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


2
しかし、パッケージにすべてのオプションを与える必要があります。
Jakob Bowyer

14

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()
     )

私はこれを行い、それはpython27.dllファイルを作成しました、そしてそれはまだ必要です。.exeファイルをpython27.dllファイルが格納されているフォルダから移動したところ、.exeファイルが実行されなくなりました。
mjwrazor

LinuxとmacOSのそのようなスクリプトを見せていただけますか?LinuxおよびmacOSのWindowsからスタンドアロンの実行可能ファイルを作成したい。
8Observer8

13

私はpyinstallerが好きです -特に「ウィンドウ化された」バリアント:

pyinstaller --onefile --windowed myscript.py

1つの* .exeファイルがdist /フォルダーに作成されます。


11

python 2.3-2.7などの下位互換性を高めるために、pyinstallerもお勧めし ます。
以下のためpy2exeは、Python 2.6を持っている必要があります


pyinstallerにインポートの問題があります。例:私の場合、私はこのディレクトリにいます〜/ Documents / python101 /とex50_pycomp.py&ex50.pyはこのディレクトリにあります。ex50_pycomp.pyインポートex50.py。私はpyinstaller ex50_pycomp.pyを実行し、すべてのコンパイルされ、生成されたdistを表示します。大丈夫?私はdist / ex50_pycomp /にcdし、ex50_pycompを実行します。私はVirtualMachineをにこのex50_pycomを入れたら、これはインポートエラーを言うと別の他のLinuxボックスにそれが言う「-bash:./ex_50_pycom:バイナリファイルを実行することはできません:Execの形式エラー」
driven_spider

prob1:私はpython2.7を使用していましたが、pyinstallerはpython3と話していましたpython3 setup.py build python3 setup.py install python3はすべてのpkg_resourcesを取得しますprob 3:sys_pathの使用が問題になる場合は、このpyinstaller --hidden- import = pkg_resources --onefile file.py --path = my_path rw-rw-r-- my_path:python3's dist folder pyinstaller --hidden-import = pkg_resources --onefile file.py --path = / usr / local / lib /python3.5/dist-packages/my_code_lib-0+untagged.8.gd264bd5.dirty-py3.5.egg/my_folder -rw-rw-r--
–driven_spider

8

Python 3.2スクリプトの場合、唯一の選択肢はCxfreezeです。ソースからビルドしないと機能しません。

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



6

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

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


stackoverflow.com/questions/33683133/…私はbbfreezeの非常に素晴らしいパッケージを使用しています。
user914425

依存関係を処理し、関連するpyモジュールをインストールしますか?
Volatil3 2016年

@ Volatil3はい、すべての依存関係が処理されます。ホストシステムへのモジュールのインストールへのWRT-さまざまな種類のコンパイルがあります。bbfreezeはすべてを複数の.soファイルにコンパイルするか、.eggファイルを直接コピーし、それらはすべて単一のディレクトリに(または単一のファイルとして)存在します。インストールは必要ありません。
Joe

6
pyinstaller yourfile.py -F --onefile

これにより、WindowsにスタンドアロンEXEファイルが作成されます重要な注意:exeファイルは「dist」という名前のフォルダーに生成されます

あなたはpyinstallerをインストールすることができます pip install PyInstaller

ここに画像の説明を入力してください

ここに画像の説明を入力してください


4

正確にはpythonコードのパッケージではありませんが、今ではgoogleからの不機嫌なところもあります。Python C APIをサポートしていないため、すべてのプロジェクトで機能するとは限りません。


4

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

exeファイルへのショートカットを作成し、トップでそれを移動し、目標を設定し、起動中にパス指定として、DIST \フォルダに行くの相対パスを持っている: 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-マネージャ」に名前を変更するように、何にでもショートカットの名前を変更することができます
今とき、私のダブル-ショートカットをクリックすると、Pythonでファイルを実行したかのようになります。私はこのアプローチが次のものよりも優れていることを発見しました--onefile

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

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


こんにちは、更新中です。UPX圧縮をやめて、最終的に--onefileを使用することにしました。UPXには現在、特定のDLLの圧縮に関するバグがあるため、いずれかを選択する必要がありました。
Nikhil VJ

3

Cythonを使用してcに変換し、コンパイルしてgccとリンクします。もう1つの方法として、Cでコア関数(リバースを困難にしたい関数)を作成し、それらをコンパイルして、Pythonブーストを使用してコンパイル済みコードをインポートすることができます(さらに、コード実行がはるかに高速になります)。次に、前述のツールを使用して配布します。


1

PyRun、https: //www.egenix.com/products/python/PyRun/ もオプションであると聞いています。


5
ソリューションへのリンクを歓迎しますが、それがなくても回答が役立つことを確認してください。リンクの前後にコンテキストを追加して、他のユーザーがそれが何であるか、なぜそこにあるのかを理解し、ページの最も関連性の高い部分を引用してくださいターゲットページが利用できない場合にリンクし直します。リンクに過ぎない回答は削除される場合があります。
ペッターフリバーグ2017年

このオプションは現在Windowsをサポートしていません。
bob
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.