8 ポイント 投稿者 waveware 2025-05-31 | 2件のコメント | WhatsAppで共有

多数の 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)はまだサポートしていませんが、torchtorchvisionnumpypandas といった主要パッケージは問題なく動作することを確認しています。

https://github.com/waveware4ai/zimport

  • また、portable python と非常に相性が良いです。こちらも GitHub にアップロードしました。linux 版は直接コンパイルし、windows 版は embedded を改造しました。

https://github.com/waveware4ai/PortablePython

  • 使用時に発生するバグや問題点は、報告していただければ改善していきます。

ありがとうございます。良い一日をお過ごしください

2件のコメント

 
waveware 2025-06-11
  • cython を使用する av パッケージなど、import 関連の問い合わせがあったため、動作するように修正しました。
    他のパッケージでも動作しないものがあれば、報告いただければ修正します。
 
waveware 2025-06-02