การสร้างสคริปต์ Python แบบรันได้เองด้วย uv
(blog.dusktreader.dev)- วิธีใช้
uvกับสคริปต์ Python เพื่อสร้าง สคริปต์แบบรันได้เองที่พร้อมใช้งานทันทีโดยไม่ต้องติดตั้ง dependencies ล่วงหน้า - เป็นแนวทางเชิงปฏิบัติที่เกิดขึ้นจากสถานการณ์ที่ใช้สคริปต์ Python สำหรับทดสอบ API ในโปรเจกต์ Go
ข้อจำกัดของวิธีเดิม
- หากต้องการรันสคริปต์ Python ที่ใช้แพ็กเกจอย่าง
httpx,IPython,loguruเป็นต้น ก่อนหน้านี้ต้องเลือกอย่างใดอย่างหนึ่งต่อไปนี้- ติดตั้งแพ็กเกจลงในระบบ Python โดยตรง
- สร้าง virtual environment แล้วติดตั้งแพ็กเกจก่อนรัน
- ทั้งสองวิธีล้วนยุ่งยาก อาจส่งผลต่อสภาพแวดล้อมของระบบ และเมื่อต้องแชร์ให้ผู้อื่นก็มักต้องอธิบายขั้นตอนยาวขึ้น
รันสคริปต์ได้ง่ายขึ้นด้วย uv
uvเป็นตัวจัดการแพ็กเกจ Python และเป็นเครื่องมือทดแทน pip ที่ช่วยให้รันสคริปต์ Python ใน สภาพแวดล้อมแบบแยกขาด ได้- สามารถระบุ ข้อมูล dependencies ไว้ภายในสคริปต์เอง ได้ผ่านคอมเมนต์
# /// script# /// script # dependencies = ["ipython", "httpx", "loguru"] # /// - สคริปต์ที่มีการตั้งค่านี้สามารถรันได้ด้วยคำสั่งต่อไปนี้:
uv run jam_users.py - uv จะจัดการสร้าง virtual environment ชั่วคราว ติดตั้งแพ็กเกจที่จำเป็น และรันสคริปต์ให้โดยอัตโนมัติในครั้งเดียว
ทำให้เป็นสคริปต์ที่รันได้โดยตรง
- แม้จะทำให้รันได้เหมือนสคริปต์ Python ทั่วไปด้วย
#!/usr/bin/env pythonได้ แต่วิธีนี้จะไม่รู้จักคอมเมนต์ script ของ uv - จึงแก้ปัญหาได้ด้วยการใส่คำสั่ง uv ลงใน shebang โดยตรงดังนี้
#!/usr/bin/env -S uv run --script # /// script # dependencies = ["ipython", "httpx", "loguru"] # /// - วิธีนี้สามารถ
chmod +xแล้วรันได้โดยตรง และบนระบบยูนิกซ์อื่น ๆ ก็ยังทำงานได้เหมือนเดิมหากมี uv ติดตั้งอยู่:./jam_users.py
ข้อดีและการนำไปใช้
- แนวทางของ uv มีประโยชน์มากเมื่อจำเป็นต้องส่งต่อสคริปต์ให้ผู้อื่น
- ไม่ต้องตั้งค่าล่วงหน้าที่ซับซ้อน เพราะแพ็กเกจและสภาพแวดล้อมที่ต้องใช้จะถูกจัดเตรียมให้อัตโนมัติ
- ไม่ทำให้ system Python หรือสภาพแวดล้อมแบบ global ปนเปื้อน
- สคริปต์เพียงไฟล์เดียวก็จัดการได้ทั้งการรันและการดูแล dependencies
ผู้เขียนอธิบายว่าในอดีตเคยมีประสบการณ์ที่ต้องส่งสคริปต์ Python ให้คนอื่นพร้อมคำอธิบายการติดตั้งที่ซับซ้อน แต่ตอนนี้สามารถแก้ปัญหานี้ได้อย่างง่ายดายด้วย uv
- มีประสิทธิภาพทั้งกับสคริปต์ทดสอบขนาดเล็กและสคริปต์อัตโนมัติที่ใช้ในงานจริง
ยังไม่มีความคิดเห็น