2017-12-07 3 views
7

私は40MB以上の単純なpandas pyinstaller exeを持っています。pyinstaller exeのサイズを小さくする

私のexeファイルの例:このため

import collections 
import csv 
import selenium 
import pandas 

print('hi') 

40メガバイトの+は、ビット行き過ぎです。

これをできるだけ減らすにはどうすればよいですか?

一つの方法:

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 

可能solution複数の実行可能ファイルを使用した場合、すべての輸入品との別のフォルダまたは実行可能ファイルに各実行可能ファイルをリンクすることができます。 Pythonインタプリタhttps://virtualenv.pypa.io/en/stable/

+0

依存関係を削除すると、exeはスクリプトを実行できなくなるか、何か不足していますか? @FlorentB。 –

+1

Pyinstallerは必要のない他のものをパッケージしています。また、そのexeのための40メガバイト?私はそれをUPXしようとしましたが、それは私にとってはあまり変わっていません。それは間違っている必要があります。 –

+0

私が 'pyinstaller --onefile test.py'を実行すると(test.pyにあなたの例が含まれています)、私は約5MBの実行可能ファイルを手に入れます。 –

答えて

3

は、仮想のenvを使用した作業のいくつかの詳細はここにある

のみ必要なライブラリをvirtualenvのを使用して環境を設定してみてください、そしてそこにインストール実行可能ファイル

除外するモジュールを指定ファイルのAnalysisexcludesリストに追加してみることができます。

また、UPXを使って実行ファイルを圧縮してみてください。 A note on using UPX

+0

ファイルの破損の問題とPythonのために私は最近私のOS全体を再インストールしなければならなかったので、私はこれをすることを躊躇しています。これは安全ですか?これがバーチャルボックスにどのように表示されるかを見ていきます。 –

+1

はい - これはPythonのバーチャルボックスに似ています - すべてのパッケージは別々の仮想envにインストールされており、メインのpythonインストールには影響しません。 ディレクトリを削除するだけで、ライブラリとバージョンの組み合わせが異なるsevral virtualenvがあります。 –

+0

私は仮想環境に精通していませんが、私はそうしなければなりません。バーチャルボックスにpyinstallerを使用すると、問題が発生します。おそらく、仮想環境が修正されます。 –

0

とすべてのインポートモジュールが含まれています。

+0

デフォルトでupxになっていませんか?私は、おそらく理想的ではないので、多数のモジュールを除外しています。特定のディレクトリ以外のすべてのモジュールを除外する必要はありませんか? –

+0

私はそれが自動的にupxedだと思った、私の間違い。何かが好きです:pyinstaller -F --upx-dir C:\ Users \ DD \ Downloads \ upx394w \ upx394w \ 123 \ upx308w \ upx.exe zz.specは動作しません。 –

3

これらの回答が両方とも優れているように感じます。私にとって

、それはexeファイルが巨大なパンダを使用した単純なケースです。

特定のディレクトリを削除することは役に立ちましたが、UPXINGも大いに役立ちました。

私はそれが多くのことを減少持って、それはデフォルトでこれをやっていませんでした。

最後に、最も多くのインポートソリューションについては、Importing Python modules from a select locationについて説明しています。だからこのすべてを行った機能がありましたが、今のところ手動ハンドリングが含まれています:マルチパッケージバンドルが壊れているからです。

今の多くのために簡単な解決策にexeファイルの

あなたは、多くの実行可能ファイルを持っている場合は、私は非常にこのアプローチをお勧めします:abc.pyフォルダの一つのディレクトリにある

pyinstaller -F abc.py --onedir (Have all imports of both scripts) 
pyinstaller -F abd.py --onedir (Have all imports of both scripts) 

今すぐ入れabd.exeをその他の外部スクリプトも含まれます。それらの名前が異なるか、または1つのスクリプトだけが実行されるようにしてください。

すべての依存関係が1つのフォルダにあるため、これは本当にうまく動作します。これはそれがどうあるべきかです。したがって、この例では、1つのフォルダが40MBであるとします。後で別のexeごとに、40mbではなく+ 5mb(またはexeの大きさ)になります。

関連する問題