40MBを超える単純なpandas pyinstaller exeがあります。
私のexeの例:
import collections
import csv
import Selenium
import pandas
print('hi')
このための40MB +は少し過剰に思えます。
これを可能な限り減らすにはどうすればよいですか?
1つの方法:
pyinstaller --onefile --exclude matplotlib --exclude scipy --exclude pandas --exclude numpy.py
ただし、これは除外リストの大きさを考慮すると実用的ではありません。
Pyinstallerのフォルダーを選択してモジュールを取得し、他のすべてを除外して、小さなアプリケーションを作成するにはどうすればよいですか?
仕様ファイル:
a = Analysis(['123.py'],
pathex=['C:\\Users\\AA\\ZZ'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='123',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )
言及する価値もあります。デフォルトでは、Pyinstallerはパンダを検出しません。
追加:
hiddenimports = ['pandas._libs.tslibs.timedeltas']
To: C:\Users\<NAME>\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyInstaller\hooks
複数の実行可能ファイルを使用する場合、可能な ソリューション は、各実行可能ファイルを個別のフォルダまたはすべてのインポートを含む実行可能ファイルにリンクすることです。
virtualenvを使用して環境を設定し、そこに必要なライブラリのみをインストールしてみてください
仮想envの使用に関する詳細はこちら: https://virtualenv.pypa.io/en/stable/
これらの答えは両方とも素晴らしいと思います。
私にとって、pandasを使用する単純なケースは、exeが巨大であることです。
特定のディレクトリを削除することは有用でしたが、UPXINGも大いに役立ちました。
私はそれを大幅に削減しましたが、デフォルトではこれをしていませんでした。
そうは言っても、最終的で最もインポートするソリューションについては、ここで説明します。 選択場所からのPythonモジュールのインポート そのため、これをすべて実行する機能がありましたが、現時点では次のような手動処理が必要です。multipackage-bundlesが壊れています。
さあ、たくさんのexeのシンプルなソリューションへ
多くの実行可能ファイルがある場合、このアプローチを強くお勧めします。
pyinstaller -F abc.py --onedir (Have all imports of both scripts)
pyinstaller -F abd.py --onedir (Have all imports of both scripts)
ここで、abd.exeをabc.pyフォルダーの1つのディレクトリおよびその他の外部スクリプトに配置します。必ず異なる名前を付けるか、実行するスクリプトは1つだけにしてください。
すべての依存関係が1つのフォルダーにあるため、これは非常にうまく機能します。これがその方法です。したがって、この例では、40MBの1つのフォルダーがあると言います。その後の追加のexeごとに、それぞれ40MBではなく+ 5mb(またはexeの大きさ)のみになります。
私はAnaconda環境を使用しているため、virtualenvソリューションはオプションではありません。私の方法は、スペックファイルから不要なモジュールを除外することでした。
分析中(...)
excludes=['pandas', 'numpy'],
(これは、ファイルのサイズを非常に大きくするモジュールです)
ビルドごとに、この調整済みスペックファイルを使用してexeを作成しています。
pyinstaller "mySpec.spec" --distpath="<path>"
pythonインタープリターとインポートされたすべてのモジュールは、実行可能ファイルに含まれています。
除外するモジュールを、仕様ファイルのexcludes
の下にあるAnalysis
リストに追加してみてください。
UPXを使用して実行可能ファイルを圧縮することもできます。 PXの使用に関する注意 を参照してください