zimport - 膨大な Python パッケージを圧縮して管理
(github.com/waveware4ai)多数の Python パッケージを管理していると、膨大なファイル数が負担になることがあります。そこで役立つのが zimport です。
紹介
- zimport は Python の標準
zipimportを置き換え、改良したツールです。 - zimport は zip アーカイブから Python パッケージを読み込み、管理するために使われます。つまり、Java の jar のように Python パッケージを管理できます。また、動的ライブラリ(
.dll,.pyd,.so)の読み込みにも対応しています。 - このツールを作ったことで、私の Python 作業ディレクトリは約 160GB・数百万ファイルから、80GB・1万ファイル程度まで減りました。
主な機能
- zip アーカイブからの動的ライブラリ読み込みをサポート(
.pyd,.dll,.so,.dylib) - zip アーカイブ内での
read()時に、Java のgetresourceのように内部ファイル(例: 環境ファイル)を読み込む機能をサポート - コンパイル済み
.pycファイルをサポート(name.cpython-version.pycおよび__pycache__フォルダ)
使用技術
importlib,meta_path,path_hooks- function intercept(標準
open,stat,read,ctypes.WinDLL,ctypes.CDLLなど)
対応環境
- Python の win/linux/macosx をサポート
- Python バージョン 3.8〜3.12 をサポート
使い方
python -m pip install zimport
import zimport
lib/site-packageディレクトリのパッケージをまとめて圧縮し、sys.pathに追加するだけで正常に動作します。- もちろん、時間に余裕があればパッケージごとに圧縮し、Java の jar のように依存関係に応じてパッケージを
sys.pathに追加しても構いません。 - また、一度圧縮したパッケージは共有して使えるため、ハードディスク容量の無駄を減らせると思います。
最後に
- ソースは GitHub で公開しており、現在のバージョンは 0.1.4 です。いくつかのパッケージ(たとえば
transformers)はまだサポートしていませんが、torch、torchvision、numpy、pandasといった主要パッケージは問題なく動作することを確認しています。
- また、portable python と非常に相性が良いです。こちらも GitHub にアップロードしました。linux 版は直接コンパイルし、windows 版は embedded を改造しました。
- 使用時に発生するバグや問題点は、報告していただければ改善していきます。
ありがとうございます。良い一日をお過ごしください
2件のコメント
cythonを使用するavパッケージなど、import関連の問い合わせがあったため、動作するように修正しました。他のパッケージでも動作しないものがあれば、報告いただければ修正します。
transformersパッケージにも対応しました。もともとの目標は、ComfyUI ベースの Wan2.1 (https://github.com/kijai/ComfyUI-WanVideoWrapper, https://github.com/Wan-Video/Wan2.1) をポータブルに動作させることでしたが、先ほど
transformers関連のソース修正を終え、zimportを使って動かしてみたところ、うまく動きました。ご利用いただきありがとうございます。
https://github.com/waveware4ai/zimport