Show GN: zimport - 수많은 python 패키지를 압축하여 관리
(github.com/waveware4ai)python 패키지를 관리하다 보면 수많은 파일들이 부담스러울때 필요한 zimport 를 소개합니다.
소개
- zimport는 Python의 표준 zipimport를 대체하고 개선한 도구입니다.
- zimport는 zip-archives에서 Python 패키지를 로드하고 관리하는 데 사용됩니다. 즉, Java jar처럼 Python 패키지를 관리할 수 있습니다. 또한 동적 라이브러리(.dll, .pyd, .so) 로드도 지원합니다.
- 이 도구를 만들고 저의 python 작업 디렉토리는 약 160gb, 수백만개 파일에서 80G 1만 개 수준으로 줄어 들었습니다.
주요기능
- zip-archive에서 동적 라이브러리 로딩 지원(.pyd, .dll, .so, .dylib)
- zip-archive에서 내부 read() 시에 Java의 getresource처럼 내부 파일(예: 환경 파일) 읽기 지원
- 컴파일된 .pyc 파일 지원(name.cpython-version.pyc 및 pycache 폴더)
사용된기술
- importlib, meta_path, path_hooks
- function intercept (standard open, stat, read, ctypes.WinDLL, ctypes.CDLL 등)
사용환경
- python win/linux/macosx 지원
- python version 3.8~3.12 지원
사용방법
python -m pip install zimport
import zimport
- lib/site-package 디렉토리에서 패키지를 한꺼번에 압축하고, sys.path 에 추가하기만 하면 정상적으로 작동합니다.
- 물론, 시간의 여유가 되신다면 패키지별로 압축하여, java 의 jar 처럼 의존성에 따라서 패키지를 sys.path 에 추가해 주시면 됩니다.
- 또한 한번 압축된 package 는 share 하여 쓸수 있기 때문에 하드디스크 공간의 낭비를 줄여줄수 있다고 생각합니다.
마지막으로
- 소스는 github 에 공개하였으며 현재 버전은 0.1.4 입니다. 몇몇 package (예를들어 transformers) 아직 지원하지 안으며, torch, torchvision, numpy, pandas 와 같은 major 패키지는 이상없이 동작함을 확인하였습니다.
- 또한, portable python 과 아주 궁합이 잘맞습니다. 이것도 github 에 업로드 하였습니다. linux 버전은 직접 컴파일하였고, windows 버전은 embeded 를 개작하였습니다.
- 사용시 발생하는 버그나 문제점들은 리포팅해주시면 개선하도록 하겠습니다.
감사합니다. 좋은 하루 보내세요
- transformers 패키지도 이제 지원합니다.
원래 목표가 ComfyUI 기반의 Wan2.1 (https://github.com/kijai/ComfyUI-WanVideoWrapper, https://github.com/Wan-Video/Wan2.1) 을 Portable 하게 동작시키는 것이었는데, 방금 transformers 관련 소스 수정을 마치고, zimport 를 사용하여 동작시키니, 잘 되네요.
사용해 주셔서 감사합니다.
https://github.com/waveware4ai/zimport