30 คะแนน โดย darjeeling 2025-07-07 | 4 ความคิดเห็น | แชร์ทาง WhatsApp

สรุปวิดีโอ "uv: Making Python Local Workflows FAST and BORING in 2025"

วิดีโอนี้เป็นพาร์ตที่สองว่าด้วยวิธีใช้เครื่องมือจัดการแพ็กเกจ Python uv เพื่อทำให้เวิร์กโฟลว์การพัฒนาแบบโลคัลรวดเร็วและมีประสิทธิภาพมากขึ้น โดยมีประเด็นสำคัญดังนี้

1. การใช้คำสั่งหลักของ uv
  • uv run: รันคำสั่งอย่าง pytest หรือ fastapi ภายใน virtual environment โดยใช้งาน dependencies ที่กำหนดไว้ใน pyproject.toml และถูกล็อกไว้ในไฟล์ uv.lock
  • uv 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 coverage
    • serve: รันเซิร์ฟเวอร์สำหรับพัฒนา
    • 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 ความคิดเห็น

 
gracefullight 2025-07-10

ผมทำเทมเพลตอันหนึ่งไว้เพื่อใช้กับ https://github.com/gracefullight/py-starter ครับ

 
aabb2467 2025-07-08

ถ้าใช้ poethepoet ก็จะสามารถกำหนด task ไว้ใน pyproject.toml แล้วใช้งานได้ ดังนั้นผมเลยใช้แทน just ครับ

 
gracefullight 2025-07-10

ขอบคุณครับ

 
dkmin 2025-07-09

ขอบคุณครับ https://poethepoet.natn.io/