8 puntos por waveware 2025-05-31 | 2 comentarios | Compartir por WhatsApp

Les presento zimport, una herramienta útil cuando la gran cantidad de archivos al gestionar paquetes de Python se vuelve una carga.

Introducción

  • zimport es una herramienta que reemplaza y mejora el zipimport estándar de Python.
  • zimport se usa para cargar y gestionar paquetes de Python desde archivos zip. Es decir, permite gestionar paquetes de Python como si fueran archivos jar de Java. Además, también soporta la carga de bibliotecas dinámicas (.dll, .pyd, .so).
  • Al crear esta herramienta, mi directorio de trabajo de Python se redujo de unos 160 GB y varios millones de archivos a un nivel de 80 GB y 10 mil archivos.

Características principales

  • Soporte para cargar bibliotecas dinámicas desde zip-archives (.pyd, .dll, .so, .dylib)
  • Soporte para leer archivos internos (por ejemplo, archivos de entorno) durante read() dentro del zip-archive, similar a getresource de Java
  • Soporte para archivos compilados .pyc (name.cpython-version.pyc y la carpeta __pycache__)

Tecnologías utilizadas

  • importlib, meta_path, path_hooks
  • interceptación de funciones (open, stat, read, ctypes.WinDLL, ctypes.CDLL, etc. estándar)

Entorno de uso

  • Soporta Python en Windows/Linux/macOS
  • Soporta Python versiones 3.8~3.12

Cómo usarlo

python -m pip install zimport
import zimport

  • Funciona correctamente con solo comprimir de una vez los paquetes del directorio lib/site-package y agregarlos a sys.path.
  • Por supuesto, si tienes tiempo, también puedes comprimirlos por paquete y agregar cada paquete a sys.path según sus dependencias, como con los archivos jar de Java.
  • Además, una vez comprimido, un package puede compartirse y reutilizarse, por lo que creo que puede ayudar a reducir el desperdicio de espacio en disco.

Por último

  • El código fuente fue publicado en GitHub y la versión actual es la 0.1.4. Algunos package (por ejemplo, transformers) todavía no son compatibles, pero confirmé que paquetes principales como torch, torchvision, numpy y pandas funcionan sin problemas.

https://github.com/waveware4ai/zimport

  • Además, combina muy bien con Portable Python. También lo subí a GitHub. La versión de Linux fue compilada directamente y la versión de Windows fue modificada a partir de la embedded.

https://github.com/waveware4ai/PortablePython

  • Si encuentran bugs o problemas al usarlo, les agradeceré que los reporten para seguir mejorándolo.

Gracias. Que tengan un buen día.

2 comentarios

 
waveware 2025-06-11
  • Se corrigió para que funcione, ya que hubo consultas sobre imports en paquetes como av que usan cython.
    Si hay otros paquetes que tampoco funcionen, por favor repórtenlos y los corregiremos.
 
waveware 2025-06-02