zimport - บีบอัดและจัดการแพ็กเกจ Python จำนวนมาก
(github.com/waveware4ai)ขอแนะนำ zimport สำหรับเวลาที่การจัดการแพ็กเกจ Python มีไฟล์จำนวนมหาศาลจนกลายเป็นภาระ
บทนำ
zimportเป็นเครื่องมือที่ใช้แทนและปรับปรุงzipimportมาตรฐานของ Pythonzimportใช้สำหรับโหลดและจัดการแพ็กเกจ Python จาก zip-archives กล่าวคือ สามารถจัดการแพ็กเกจ Python ได้คล้ายกับ Java jar นอกจากนี้ยังรองรับการโหลดไลบรารีแบบไดนามิก (.dll,.pyd,.so)- หลังจากสร้างเครื่องมือนี้ขึ้นมา ไดเรกทอรีงาน Python ของผมลดลงจากประมาณ 160GB กับไฟล์หลายล้านไฟล์ เหลือระดับ 80GB และประมาณ 10,000 ไฟล์
ฟีเจอร์หลัก
- รองรับการโหลดไลบรารีแบบไดนามิกจาก zip-archive (
.pyd,.dll,.so,.dylib) - รองรับการอ่านไฟล์ภายใน (เช่น ไฟล์ environment) ระหว่าง
read()ภายใน zip-archive คล้ายgetresourceของ Java - รองรับไฟล์
.pycที่คอมไพล์แล้ว (name.cpython-version.pycและโฟลเดอร์__pycache__)
เทคโนโลยีที่ใช้
importlib,meta_path,path_hooks- function intercept (
open,stat,read,ctypes.WinDLL,ctypes.CDLLมาตรฐาน เป็นต้น)
สภาพแวดล้อมการใช้งาน
- รองรับ Python บน win/linux/macosx
- รองรับ Python เวอร์ชัน 3.8~3.12
วิธีใช้งาน
python -m pip install zimport
import zimport
- เพียงบีบอัดแพ็กเกจทั้งหมดในไดเรกทอรี
lib/site-packageแล้วเพิ่มเข้าไปในsys.pathก็ทำงานได้ตามปกติ - แน่นอนว่า หากคุณมีเวลา จะบีบอัดแยกตามแต่ละแพ็กเกจ แล้วเพิ่มแพ็กเกจลงใน
sys.pathตาม dependency เหมือนjarของ Java ก็ได้ - อีกทั้งแพ็กเกจที่บีบอัดแล้วหนึ่งครั้งยังสามารถนำไปแชร์ใช้ร่วมกันได้ จึงช่วยลดการสิ้นเปลืองพื้นที่ฮาร์ดดิสก์ได้
สุดท้ายนี้
- ซอร์สโค้ดถูกเผยแพร่ไว้บน GitHub และเวอร์ชันปัจจุบันคือ 0.1.4 โดยยังมีบางแพ็กเกจ (เช่น
transformers) ที่ยังไม่รองรับ แต่ได้ยืนยันแล้วว่าแพ็กเกจหลักอย่างtorch,torchvision,numpy,pandasทำงานได้โดยไม่มีปัญหา
- นอกจากนี้ยังเข้ากันได้ดีกับ portable Python ซึ่งผมก็อัปโหลดไว้บน GitHub เช่นกัน เวอร์ชัน Linux คอมไพล์ขึ้นมาเอง ส่วนเวอร์ชัน Windows ดัดแปลงมาจาก embedded
- หากพบบั๊กหรือปัญหาในการใช้งาน รบกวนช่วยรายงานเข้ามา แล้วผมจะปรับปรุงให้ดีขึ้น
ขอบคุณครับ ขอให้เป็นวันที่ดี
2 ความคิดเห็น
avที่ใช้cythonหากมีแพ็กเกจอื่นที่ยังใช้งานไม่ได้ กรุณาแจ้งรายงานเข้ามา แล้วจะดำเนินการแก้ไขให้ครับ
transformersแล้วเดิมทีเป้าหมายคือทำให้ Wan2.1 บนพื้นฐาน ComfyUI (https://github.com/kijai/ComfyUI-WanVideoWrapper, https://github.com/Wan-Video/Wan2.1) ทำงานได้แบบพกพา แต่เมื่อกี้เพิ่งแก้ไขซอร์สที่เกี่ยวข้องกับ
transformersเสร็จ และพอลองให้ทำงานด้วยzimportก็ใช้งานได้ดีครับขอบคุณที่ใช้งานครับ
https://github.com/waveware4ai/zimport