บทความนี้เราจะมาสอนใช้ uv ตัวที่ทำหน้าที่ได้เหมือน pip แต่เร็วแรงกว่า เพราะเขียนด้วยภาษา Rust ซึ่งเร็วกว่าขนาดไหน แอดแนะนำให้ลองงงงง
uv คืออะไร?
UV คือ package manager และ project manager สำหรับ Python ที่พัฒนาโดยทีม Astral (ทีมเดียวกับ Ruff)

จุดเด่นคือ:
– เร็วมาก (เขียนด้วย Rust)
– ใช้แทน pip + venv + pip-tools ได้
– จัดการ dependency และ lock file ได้
– สร้าง virtual environment อัตโนมัติ
– รองรับการจัดการ Python version
เรียกได้ว่า UV พยายามเป็น “all-in-one tool” สำหรับ workflow ของ Python developer
ติดตั้งยังไง?
บน macOS / Linux
curl -Ls https://astral.sh/uv/install.sh | sh
หรือถ้าใช้ Homebrew:
brew install uv
บน Windows (PowerShell)
irm https://astral.sh/uv/install.ps1 | iex
ติดตั้งเสร็จแล้วตรวจสอบเวอร์ชัน:
uv --version

การใช้งานพื้นฐานของ UV
เราสามารถสร้าง Virtual Environment
แทนที่เราจะใช้คำสั่ง python -m venv venv สามารถใช้แค่ uv venv

จะสร้าง virtual environment ในโฟลเดอร์ .venv ให้อัตโนมัติ แล้วทำการ Activate
macOS / Linux
source .venv/bin/activate
Windows
.venv\Scripts\activate

ติดตั้งแพ็กเกจ
ปกติเราใช้ pip install เราใส่ uv นำหน้าแบบนี้ uv pip install requests UV จะใช้ resolver ของตัวเองที่เร็วกว่า pip

*uv จะใช้ resolver ของตัวเองที่เร็วกว่า pip
หากเราต้องการติดตั้งหลาย ๆ package พร้อมกันก็ใช้ท่าเดิมได้เลย เติม uv เข้าไปด้านหน้าพอ
uv pip install numpy pandas scikit-learn matplotlib seaborn

พอเห็นภาพแล้วใช่มั้ยครับ งั้นจะ freeze เอา package ใส่ไฟล์ requirements.txt ก็ใช้ท่าเดิมได้เลยยย
uv pip freeze > requirements.txt

ติดตั้งจาก requirements.txt ก็เช่นกัน uv pip install -r requirements.txt
แต่ในมุมมองของทีมที่ทำ uv เค้าแนะนำให้ใช้เป็น project mode ที่มีพวกคำสั่ง uv init, uv add, uv sync ไปเลยจะดีกว่า เพราะมันมี Lock File แบบใครเคยใช้ Node.js น่าจะคุ้นเคย เรียกว่าเป็นการจัดการ Dependency แบบสมัยใหม่ โดย Project mode ใช้มาตรฐาน pyproject.toml ซึ่งเป็นมาตรฐานใหม่ของ Python ecosystem
มาลองเริ่มใช้กันเลย ก่อนอื่นเราก็ต้อง uv init my-project สาย Node.js ก็จะบอกคุ้นอีกล่ะ55 แล้วเราก็เข้าไปยังโฟลเดอร์ของโปรเจกต์ที่สร้าง แล้วก็จะเจอโครงสร้างพื้นฐานของ Python หน้าตาประมาณนี้

จะเห็นได้ว่าพร้อมกว่าเราต้องมา pip freeze เองเป็นไหน ๆ แล้วถ้าเราจะติดตั้ง package เข้าไปก็ใช้ uv add แล้วตามด้วยชื่อ pagekage ได้เลย ตัวอย่างเช่น uv add fastapi

สิ่งที่เกิดขึ้นเจ้า fastapi มันก็จะโดนเขียนชื่อลงไปในไฟล์ pyproject.toml แล้วไฟล์ uv.lock ก็ถูกสร้างขึ้นมา pagekage จริง ๆ ก็ไปอยู่ใน virtual environment ทำให้ครบจบในคำสั่งเดียว

แล้วถ้าเราได้โปรเจกต์จากคนอื่นที่มีไฟล์ uv.lock อยู่แล้ว เราสามารถใช้คำสั่ง uv sync คำสั่งเดียว มันก็จะติดตั้ง dependency ตาม lock file แบบเป๊ะ ๆ ให้

มาถึงตอนรันเราสามารถรัน Python script พร้อม dependency ได้ด้วยคำสั่ง uv run ชื่อไฟล์เช่น uv run main.py
พอใช้มาสักพักผมรู้สึกมันเหมือนพวก npm ของ Node.js มากกกก เห้ย งั้นเรารัน package แบบ npx ได้มั้ยนะ คำตอบคือ ได้!!! แต่เราใช้ uvx แทน อย่างเช่น เราต้องการจะใช้ Python Linter ที่ชื่อว่า ruff
*Ruff เอาไว้ “จับผิด + จัดระเบียบโค้ด Python” ให้สะอาด ถูกต้อง และเป็นมาตรฐาน
เราสามารถรันโดยใช้คำสั่ง uvx ruff check . แบบนี้ได้ทันที
