ยกระดับเวิร์กโฟลว์การพัฒนา Python ด้วย UV
(youtube.com)สรุปวิดีโอ "uv: Making Python Local Workflows FAST and BORING in 2025"
วิดีโอนี้เป็นพาร์ตที่สองว่าด้วยวิธีใช้เครื่องมือจัดการแพ็กเกจ Python uv เพื่อทำให้เวิร์กโฟลว์การพัฒนาแบบโลคัลรวดเร็วและมีประสิทธิภาพมากขึ้น โดยมีประเด็นสำคัญดังนี้
1. การใช้คำสั่งหลักของ uv
uv run: รันคำสั่งอย่างpytestหรือfastapiภายใน virtual environment โดยใช้งาน dependencies ที่กำหนดไว้ในpyproject.tomlและถูกล็อกไว้ในไฟล์uv.lockuv add: เพิ่ม dependency ใหม่เข้าไปในpyproject.tomlและอัปเดตไฟล์uv.lockโดยอัตโนมัติuv run --with: ใส่โมดูลช่วยสำหรับการพัฒนาอย่างpdbppแบบชั่วคราวเพื่อใช้งานได้ โดยไม่ต้องเพิ่มเข้าไปใน dependencies หลักของโปรเจกต์uv lock --upgrade: อัปเดตไฟล์ล็อก dependency ได้อย่างรวดเร็วมาก และuv runจะตรวจจับการเปลี่ยนแปลงของไฟล์ล็อกระหว่างการรันโดยอัตโนมัติพร้อมซิงก์สภาพแวดล้อมให้ตรงกัน
2. การทำเวิร์กโฟลว์ให้เป็นมาตรฐานด้วย just
uvไม่มีความสามารถแบบฝังในตัวสำหรับกำหนดคำสั่งแบบกำหนดเองเหมือนhatchหรือpdm- ในวิดีโอมีการชี้ให้เห็นข้อเสียของ
Makefile(เช่น การผูกกับแพลตฟอร์มและไวยากรณ์ที่ไม่เป็นมาตรฐาน) และแนะนำอย่างมากให้ใช้ตัวรันคำสั่งที่เขียนด้วย Rust อย่างjustแทน - ใช้
justfileเพื่อทำงานที่ต้องทำซ้ำให้เป็นสูตรสำเร็จ (recipe) มาตรฐาน เช่นtest: รันการทดสอบ (ส่งอาร์กิวเมนต์ต่อได้)cov: ตรวจสอบ test coverageserve: รันเซิร์ฟเวอร์สำหรับพัฒนาcheckall: รันการตรวจสอบทั้งหมดในครั้งเดียว เช่น lint และ type check
3. การทำงานร่วมกันของ just และ uv
- ไฟล์
.env:justสามารถอ่านไฟล์.envเพื่อตั้งค่า environment variables ได้ ทำให้สร้างเวิร์กโฟลว์ที่ยืดหยุ่นได้ เช่น เพิ่มอาร์กิวเมนต์--withให้uv runแบบไดนามิก หรือเปลี่ยนพอร์ตของเซิร์ฟเวอร์ uvx(uv tool run): เป็นคำสั่งสำหรับรันแพ็กเกจจาก PyPI แยกจากโปรเจกต์ คล้ายpipxและสามารถใช้เครื่องมืออย่างhttpieภายใน recipe ของjustได้โดยไม่ต้องเพิ่มเป็น dependency ของโปรเจกต์
4. การจัดการ virtual environment โดยตรง (เวิร์กโฟลว์ทางเลือก)
- เป็นวิธีสำหรับนักพัฒนาที่ต้องการใช้งานแบบดั้งเดิม โดยเปิดใช้งาน virtual environment (
.venv) เองแทนการผ่านuv run uv sync: ซิงก์สถานะของไฟล์uv.lockกับโฟลเดอร์.venvให้ตรงกัน (ทั้งการติดตั้ง dependency และลบแพ็กเกจที่ไม่จำเป็น)direnv: เครื่องมือเชลล์ที่รันสคริปต์.envrcให้อัตโนมัติเมื่อเข้าไปในไดเรกทอรีที่กำหนด สามารถนำมาใช้เพื่อรันuv syncอัตโนมัติและเปิดใช้งาน virtual environment เมื่อเข้าสู่ไดเรกทอรีได้
บทสรุป
เมื่อผสานความเร็วของ uv เข้ากับเครื่องมืออย่าง just และ direnv ก็จะสามารถทำให้การจัดการ dependency และการรันคำสั่งต่าง ๆ เป็นแบบอัตโนมัติและเป็นมาตรฐาน ช่วยให้นักพัฒนามุ่งความสนใจไปที่ลอจิกหลักได้มากขึ้น พร้อมสร้างสภาพแวดล้อมการพัฒนาที่ "รวดเร็วและน่าเบื่อ (boring)" หรือก็คือมีความเสถียรสูงและคาดเดาได้มากนั่นเอง
4 ความคิดเห็น
ผมทำเทมเพลตอันหนึ่งไว้เพื่อใช้กับ https://github.com/gracefullight/py-starter ครับ
ถ้าใช้ poethepoet ก็จะสามารถกำหนด task ไว้ใน
pyproject.tomlแล้วใช้งานได้ ดังนั้นผมเลยใช้แทน just ครับขอบคุณครับ
ขอบคุณครับ https://poethepoet.natn.io/