8 points par waveware 2025-05-31 | 2 commentaires | Partager sur WhatsApp

Voici une présentation de zimport, utile lorsque la gestion de paquets Python s’accompagne d’un trop grand nombre de fichiers.

Introduction

  • zimport est un outil qui remplace et améliore le zipimport standard de Python.
  • zimport sert à charger et gérer des paquets Python depuis des archives zip. Autrement dit, il permet de gérer des paquets Python comme des fichiers JAR Java. Il prend également en charge le chargement de bibliothèques dynamiques (.dll, .pyd, .so).
  • En créant cet outil, mon répertoire de travail Python est passé d’environ 160 Go et plusieurs millions de fichiers à environ 80 Go et 10 000 fichiers.

Fonctionnalités principales

  • Prise en charge du chargement de bibliothèques dynamiques depuis une archive zip (.pyd, .dll, .so, .dylib)
  • Prise en charge de la lecture de fichiers internes (par ex. des fichiers d’environnement) via read() à l’intérieur d’une archive zip, comme avec getresource en Java
  • Prise en charge des fichiers compilés .pyc (name.cpython-version.pyc et le dossier __pycache__)

Technologies utilisées

  • importlib, meta_path, path_hooks
  • interception de fonctions (open, stat, read, ctypes.WinDLL, ctypes.CDLL, etc.)

Environnement d’utilisation

  • prise en charge de Python sur Windows/Linux/macOS
  • prise en charge de Python 3.8 à 3.12

Mode d’emploi

python -m pip install zimport
import zimport

  • Il suffit de compresser en une seule fois les paquets du répertoire lib/site-package, puis de les ajouter à sys.path pour que cela fonctionne correctement.
  • Bien sûr, si vous avez le temps, vous pouvez aussi compresser les paquets un par un et les ajouter à sys.path en fonction des dépendances, comme avec les JAR Java.
  • De plus, un paquet une fois compressé peut être partagé et réutilisé, ce qui permet selon moi de réduire le gaspillage d’espace disque.

Pour finir

  • Le code source a été publié sur GitHub et la version actuelle est la 0.1.4. Certains paquets (par exemple transformers) ne sont pas encore pris en charge, mais j’ai confirmé que des paquets majeurs comme torch, torchvision, numpy et pandas fonctionnent sans problème.

https://github.com/waveware4ai/zimport

  • Cela se marie aussi très bien avec Portable Python. Je l’ai également mis en ligne sur GitHub. La version Linux a été compilée manuellement, et la version Windows est une adaptation de l’embedded.

https://github.com/waveware4ai/PortablePython

  • Si vous rencontrez des bugs ou des problèmes lors de l’utilisation, merci de les signaler afin que je puisse apporter des améliorations.

Merci. Passez une excellente journée

2 commentaires

 
waveware 2025-06-11
  • Nous avons corrigé le fonctionnement afin qu'il soit compatible avec les questions liées à import, notamment pour le package av qui utilise cython.
    Si d'autres packages ne fonctionnent pas non plus, merci de nous le signaler afin que nous puissions les corriger.
 
waveware 2025-06-02