8 Punkte von waveware 2025-05-31 | 2 Kommentare | Auf WhatsApp teilen

Wenn man Python-Pakete verwaltet, werden die unzähligen Dateien oft zur Belastung – genau dafür stelle ich zimport vor.

Einführung

  • zimport ist ein Werkzeug, das Pythons Standard-zipimport ersetzt und verbessert.
  • zimport wird zum Laden und Verwalten von Python-Paketen aus Zip-Archiven verwendet. Das heißt, Python-Pakete lassen sich ähnlich wie Java-jar-Dateien verwalten. Außerdem wird auch das Laden dynamischer Bibliotheken (.dll, .pyd, .so) unterstützt.
  • Durch dieses Tool hat sich mein Python-Arbeitsverzeichnis von etwa 160 GB mit mehreren Millionen Dateien auf rund 80 GB und etwa 10.000 Dateien reduziert.

Hauptfunktionen

  • Unterstützung für das Laden dynamischer Bibliotheken aus Zip-Archiven (.pyd, .dll, .so, .dylib)
  • Unterstützung zum Lesen interner Dateien (z. B. Umgebungsdateien) bei internem read() aus Zip-Archiven, ähnlich wie Javas getresource
  • Unterstützung für kompilierte .pyc-Dateien (name.cpython-version.pyc sowie der Ordner __pycache__)

Verwendete Technologien

  • importlib, meta_path, path_hooks
  • Function Intercept (open, stat, read, ctypes.WinDLL, ctypes.CDLL usw.)

Einsatzumgebung

  • Unterstützung für Python unter Windows/Linux/macOS
  • Unterstützung für Python-Versionen 3.8–3.12

Verwendung

python -m pip install zimport
import zimport

  • Es funktioniert problemlos, wenn man Pakete im Verzeichnis lib/site-package gesammelt komprimiert und sie anschließend einfach zu sys.path hinzufügt.
  • Wenn Sie die Zeit haben, können Sie die Pakete natürlich auch einzeln komprimieren und dann – ähnlich wie bei Java-jar-Dateien – je nach Abhängigkeiten zu sys.path hinzufügen.
  • Außerdem können einmal komprimierte Pakete gemeinsam genutzt werden, wodurch sich Festplattenspeicher sparen lässt.

Zum Schluss

  • Der Quellcode ist auf GitHub veröffentlicht, die aktuelle Version ist 0.1.4. Einige Pakete (zum Beispiel transformers) werden noch nicht unterstützt, aber bei wichtigen Paketen wie torch, torchvision, numpy und pandas wurde bestätigt, dass sie problemlos funktionieren.

https://github.com/waveware4ai/zimport

  • Außerdem passt es sehr gut zu Portable Python. Auch dieses Projekt habe ich auf GitHub hochgeladen. Die Linux-Version wurde direkt kompiliert, die Windows-Version wurde auf Basis der Embedded-Version angepasst.

https://github.com/waveware4ai/PortablePython

  • Wenn bei der Nutzung Bugs oder Probleme auftreten, melden Sie sie bitte, damit ich Verbesserungen vornehmen kann.

Vielen Dank. Ich wünsche Ihnen einen schönen Tag.

2 Kommentare

 
waveware 2025-06-11
  • Ich habe einen Fix vorgenommen, damit importbezogene Fälle wie beim av-Paket, das cython verwendet, funktionieren.
    Wenn ein anderes Paket ebenfalls nicht funktioniert, melden Sie es bitte, damit ich es korrigieren kann.
 
waveware 2025-06-02