8 pontos por waveware 2025-05-31 | 2 comentários | Compartilhar no WhatsApp

Apresentamos o zimport, útil quando a enorme quantidade de arquivos se torna um peso ao gerenciar pacotes Python.

Introdução

  • zimport é uma ferramenta que substitui e melhora o zipimport padrão do Python.
  • zimport é usado para carregar e gerenciar pacotes Python a partir de arquivos zip. Ou seja, é possível gerenciar pacotes Python como arquivos jar do Java. Além disso, também oferece suporte ao carregamento de bibliotecas dinâmicas (.dll, .pyd, .so).
  • Depois de criar essa ferramenta, meu diretório de trabalho em Python foi reduzido de cerca de 160 GB e vários milhões de arquivos para algo em torno de 80 GB e 10 mil arquivos.

Principais recursos

  • Suporte ao carregamento de bibliotecas dinâmicas a partir de zip-archives (.pyd, .dll, .so, .dylib)
  • Suporte à leitura de arquivos internos (por exemplo, arquivos de ambiente) durante read() interno em zip-archives, como o getresource do Java
  • Suporte a arquivos .pyc compilados (name.cpython-version.pyc e a pasta __pycache__)

Tecnologias utilizadas

  • importlib, meta_path, path_hooks
  • interceptação de funções (open, stat, read, ctypes.WinDLL, ctypes.CDLL etc.)

Ambiente de uso

  • Suporte a Python em Windows/Linux/macOS
  • Suporte às versões Python 3.8~3.12

Como usar

python -m pip install zimport
import zimport

  • Basta compactar de uma vez os pacotes no diretório lib/site-package e adicioná-los ao sys.path para funcionar normalmente.
  • Claro, se você tiver tempo, também pode compactar por pacote e adicionar os pacotes ao sys.path de acordo com as dependências, como os arquivos jar do Java.
  • Além disso, como um pacote compactado uma vez pode ser compartilhado e reutilizado, acredito que isso pode reduzir o desperdício de espaço em disco.

Por fim

  • O código-fonte foi publicado no GitHub e a versão atual é a 0.1.4. Alguns pacotes (por exemplo, transformers) ainda não são compatíveis, mas foi confirmado que pacotes principais como torch, torchvision, numpy e pandas funcionam sem problemas.

https://github.com/waveware4ai/zimport

  • Também combina muito bem com o Portable Python. Isso também foi enviado ao GitHub. A versão Linux foi compilada manualmente, e a versão Windows foi adaptada a partir da embedded.

https://github.com/waveware4ai/PortablePython

  • Se houver bugs ou problemas durante o uso, reporte-os para que eu possa melhorar.

Obrigado. Tenha um ótimo dia

2 comentários

 
waveware 2025-06-11
  • Corrigi para que funcione também com questões relacionadas a import, como no pacote av que usa cython.
    Se houver outros pacotes que não estejam funcionando, envie um relatório para que eu possa corrigir.
 
waveware 2025-06-02