Python: モジュールの除外 Pyinstaller 質問する

Python: モジュールの除外 Pyinstaller 質問する

私は Py2Exe ではなく Pyinstaller を使い始めました。しかし、すぐに問題に遭遇しました。不要なモジュールを除外するにはどうすればいいのでしょうか。また、単一の実行可能ファイルに含まれているモジュールを表示するにはどうすればいいのでしょうか。

pydPython インストールの DLL フォルダーからいくつかのファイルとディレクトリを削除するdllと、Pyinstaller はそれらを見つけられず、インストールされなくなります。すべてのモジュールでこれを行うのは、かなり面倒なので、あまりしたくありません。

Pyinstaller が作成する spec ファイルを編集してみました。

a.binaries - [('ssl','pydoc',)],

しかし、ファイルのサイズは同じままだったので、うまくいかなかったと結論付けました。

では、Pyinstaller に含まれているモジュールを確認するにはどうすればよいでしょうか。また、不要なモジュールを除外するにはどうすればよいでしょうか。

ベストアンサー1

ここでは私が使用しているオプションを要約します。

PyInstaller TOC は、ドキュメントに記載されているとおりです。

TOC は、(名前、パス、タイプコード) 形式のタプルのリストのように見えます。実際は、リストではなく順序付けられたセットです。TOC には重複が含まれず、一意性は名前のみに基づきます。

言い換えれば、単純に言えば:

a_toc = [('uname1','/path/info','BINARY'),('uname2','/path/to','EXTENSION')...]

したがって、.spec ファイルでは、スクリプトの分析結果を取得したら、次のいずれかの方法でそれぞれの TOC をさらに変更できます。

  • のために特定のファイル/モジュールは、差 (-) と積 (+) の演算を使用して TOC を変更します。 *

  • 追加/削除用リストファイル/モジュールは TOC を反復処理し、パターン マッチング コードと比較します。

(* 余談ですが、違いが機能するには、TOC()明示的にキャストする必要があるようです。また、セットの要素を一意に定義するのは名前だけなので、それを指定するだけでよいことに注意してください。('sqlite3', None, None))

以下に、説明的な例 (.spec ファイルから取得) を示します。ここでは、良くも悪くも、scipy、IPython、zmq への参照をすべて削除し、特定の sqlite、tcl/tk、ssl .DLL を削除し、不足している opencv .DLL を挿入し、最後に matplotlib 以外のすべてのデータ フォルダーを削除します...

結果として得られるPyinstaller .exeが、.pycファイルが期待される.DLLをロードしようとしたときに機能するかどうかは議論の余地がある。:-/

# Manually remove entire packages...

exclude = ["scipy", "IPython", "zmq"]
a.binaries = [x for x in a.binaries if not x[0].startswith(tuple(exclude))]

# Target remove specific ones...

a.binaries = a.binaries - TOC([
 ('sqlite3.dll', None, None),
 ('tcl85.dll', None, None),
 ('tk85.dll', None, None),
 ('_sqlite3', None, None),
 ('_ssl', None, None),
 ('_tkinter', None, None)])

# Add a single missing dll...

a.binaries = a.binaries + [
  ('opencv_ffmpeg245_64.dll', 'C:\\Python27\\opencv_ffmpeg245_64.dll', 'BINARY')]

# Delete everything bar matplotlib data...

a.datas = [x for x in a.datas if
 os.path.dirname(x[1]).startswith("C:\\Python27\\Lib\\site-packages\\matplotlib")]

おすすめ記事