Intro: ทำไมผมถึงยอมหักดิบเลิกใช้ Pip?
ถ้าคุณเป็น Python Developer ที่เขียนโค้ดมาสักพัก คุณน่าจะเคยเจอปัญหาความ “เทอะทะ” ของ Ecosystem เก่าๆ:
- จะเริ่มโปรเจกต์ที ต้องลง
pyenvจัดการเวอร์ชัน - ต้องสร้าง
venvแยก - ต้อง
pip installที่รอจนหลับ โดยเฉพาะโปรเจกต์ Data Science ใหญ่ๆ - พอจะ Deploy ขึ้น CI/CD ก็เปลือง Runtime นาทีละหลายบาทเพราะมัวแต่รอ install packages
ผมเองก็เจอปัญหานี้ จนกระทั่งได้ลอง UV (Unified Virtualenv) เครื่องมือตัวใหม่จากทีม Astral (ผู้สร้าง Ruff) ที่เคลมว่า “เร็วระดับสายฟ้าแลบ” หลังจากลองใช้จริง ผมพบว่ามันไม่ใช่แค่เร็ว แต่เปลี่ยน Workflow การทำงานแบบ All-in-one จนผมลืม Pip ไปเลย
บทความนี้จะพาคุณไปดูวิธีใช้งานแบบเจาะลึก พร้อมเทคนิคพิเศษที่หาอ่านที่อื่นยาก: การตั้งค่า Project ให้ AI Assistant (อย่าง Cursor หรือ ChatGPT) รู้จัก UV เพื่อให้ช่วยเราเขียนโค้ดได้ลื่นไหลที่สุด
1. The “Speed Demon”: ทำไมความเร็วถึงเปลี่ยนชีวิต (และเงินในกระเป๋า)
หลายคนอาจบอกว่า “รอ Pip นิดหน่อยจะเป็นไรไป” แต่ในโลกของ CI/CD ทุกวินาทีคือ “ต้นทุน” ครับ
ประสบการณ์จริง:
จากที่ผมทดสอบ โปรเจกต์ขนาดกลางที่มี dependencies ประมาณ 50 ตัว:
-
Pip: ใช้เวลา install ประมาณ 1-2 นาที (บน GitHub Actions)
-
UV: ใช้เวลา install ต่ำกว่า 5 วินาที (ด้วย caching mechanism ที่ฉลาดกว่ามาก)
สิ่งที่ได้คืนมา:
-
ลดระยะเวลา Deploy Pipeline ลงได้เกือบ 50%
-
ถ้าคุณรัน Pipeline วันละ 20 รอบ เดือนนึงคุณประหยัด Runtime ได้หลายชั่วโมง = ประหยัดค่า Cloud Credit ได้จริง
🧐 Deep Dive: ความลับของความเร็ว (Why Rust Matters?)
หลายคนสงสัยว่าทำไมแค่เปลี่ยนภาษาเขียนจาก Python เป็น Rust ถึงเร็วขึ้นขนาดนี้? คำตอบไม่ได้อยู่ที่ภาษาอย่างเดียวครับ แต่อยู่ที่ Architecture ที่ UV ออกแบบมาใหม่หมด เพื่อแก้ Pain Point เดิมๆ ของ Pip:
Global Cache & Hardlinks (ประหยัดที่เก็บข้อมูลแบบอัจฉริยะ):
Old Way (Pip): ถ้าคุณมี 10 โปรเจกต์ที่ใช้
pandasเหมือนกัน Pip จะดาวน์โหลดและ Copy ไฟล์pandasแยกกัน 10 ที่ (เปลืองพื้นที่ Disk 10 เท่า และเสียเวลา Copy)New Way (UV): ดาวน์โหลดลง Central Cache แค่ครั้งเดียว โปรเจกต์ไหนจะใช้ UV จะสร้าง “Hardlink” (Ref ระดับไฟล์ซิสเต็มที่เร็วเกือบ Instant) ไปที่ Cache นั้น ผลคือ การ Install เร็วขึ้นระดับ Milliseconds และไม่กินพื้นที่ Harddisk เพิ่มซ้ำซ้อน
Parallel Resolution (คิดพร้อมกันหลายหัว):
Pip ทำงานแบบ Sequential (ทำทีละอย่าง) ในการแก้สมการ Dependency
UV ใช้พลังของ Rust ในการแตก Thread เพื่อคำนวณและดาวน์โหลดหลายๆ แพ็กเกจพร้อมกัน เต็ม Bandwidth ที่เครื่องคุณมี ทำให้ใช้ทรัพยากรคุ้มค่าที่สุด
2. All-in-One: ลบ 3 Tools ทิ้ง แล้วเหลือ UV ตัวเดียว
สิ่งที่ทำให้ผมชอบ UV มากกว่าแค่เรื่องความเร็ว คือความ “คลีน” ครับ เมื่อก่อนเราต้องมี:
-
pyenv(จัดการ Python version) -
virtualenv/venv(สร้าง environment) -
pip(ลงของ)
แต่โลกใหม่ของ UV: คุณไม่ต้องลง Python ลงเครื่องด้วยซ้ำ! UV จัดการให้หมด:
# ไม่ต้องมี python ในเครื่อง สั่งรันได้เลย uv จะไปโหลดมาให้เอง
uv run --python 3.12 main.py
คำสั่งเดียวจบ ไม่ต้องจำ source venv/bin/activate อีกต่อไป มันทำให้เครื่อง Dev ของเราสะอาดมาก ไม่รกไปด้วย Python หลายเวอร์ชันที่ตีกันมั่ว
3. The “AI-Native” Workflow: สอน LLM ให้ใช้ UV เป็น (Highlight)
นี่คือส่วนสำคัญที่หลายคนยังไม่รู้ครับ ยุคนี้เราเขียนโค้ดกับ AI (Copilot, Cursor, Windsurf) แต่ถ้าเราไม่ “บอก” มัน AI จะติดนิสัยเดิมคือใช้ pip หรือ python -m venv ซึ่งจะทำให้ Environment ของเราพังได้
เพื่อให้การทำงานแบบ Modern Python สมบูรณ์แบบ ผมแนะนำให้สร้างไฟล์ Rules/Instructions ไว้ในโปรเจกต์เพื่อให้ AI เข้าใจบริบทครับ
วิธีการ (How-to):
สร้างไฟล์ .cursorrules (สำหรับ Cursor) หรือใส่ใน Custom Instructions ของโปรเจกต์:
# AI Coding Instructions for This Project
**Package Manager:**
- This project uses **UV** exclusively. DO NOT use `pip` or `python -m venv`.
- To add packages: Use `uv add <package_name>` (NOT `pip install`).
- To run scripts: Use `uv run <script.py>`.
- To sync dependencies: Use `uv sync`.
**Environment:**
- Do not manually activate venv. Use `uv run` to execute commands in the isolated environment automatically.
- Python version is managed by `.python-version` file.
**Lockfile:**
- Always respect `uv.lock`. If you add a dependency, ensure the lockfile is updated.
ผลลัพธ์ที่ได้: เมื่อคุณสั่งให้ AI “ลง library pandas ให้หน่อย”
-
Before: AI จะพิมพ์
pip install pandas(ซึ่งผิดคอนเซปต์โปรเจกต์เรา) -
After: AI จะพิมพ์
uv add pandasให้อัตโนมัติ ถูกต้องตาม Workflow เป๊ะ!
4. Migration Guide: ย้ายบ้านแบบเจ็บตัวน้อยที่สุด
สำหรับคนที่ชินกับ Pip หรือ Poetry การติดตั้งและการย้ายมา UV อาจจะดูเหมือนยุ่งยากในตอนแรก (โดยเฉพาะการ set path) แต่จริงๆ ง่ายกว่าที่คิดครับ
Step 1: Install UV (แบบทีเดียวจบ)
# MacOS / Linux
curl -LsSf [https://astral.sh/uv/install.sh](https://astral.sh/uv/install.sh) | sh
# Windows (PowerShell)
powershell -c "irm [https://astral.sh/uv/install.ps1](https://astral.sh/uv/install.ps1) | iex"
Step 2: เริ่มต้นโปรเจกต์ แทนที่จะ git init แล้วสร้าง venv เอง ให้ใช้:
uv init my-new-project
cd my-new-project
uv add requests # ลงของ
uv run hello.py # รันเลย
Step 3: สำหรับโปรเจกต์เก่า (ที่มี requirements.txt)
uv pip install -r requirements.txt
# หรือแปลงเป็น uv native
uv add -r requirements.txt
5. UV Cheat Sheet: รวมคำสั่งที่ใช้บ่อย (เซฟเก็บไว้ดูได้เลย)
สรุปคำสั่งสำคัญที่คุณต้องใช้ในชีวิตประจำวัน เรียงตามลำดับการทำงานจริงครับ
🛠️ Installation & Setup
| Action | Command |
|---|---|
| ติดตั้ง UV (Mac/Linux) | curl -LsSf https://astral.sh/uv/install.sh | sh |
| ติดตั้ง UV (Windows) | powershell -c "irm https://astral.sh/uv/install.ps1 | iex" |
| อัปเดต UV เป็นเวอร์ชันล่าสุด | uv self update |
🚀 Project Initialization
| Action | Command |
|---|---|
| สร้างโปรเจกต์ใหม่ | uv init <project-name> |
| ระบุ Python Version | uv python pin 3.12 (สร้างไฟล์ .python-version) |
| สร้าง Virtualenv (Auto) | ไม่ต้องทำเอง! uv run จะสร้างให้อัตโนมัติเมื่อรันครั้งแรก |
📦 Dependency Management
| Action | Command | Note |
|---|---|---|
| ลง Package ใหม่ | uv add pandas |
เร็วกว่า pip install มาก |
| ลง Dev Dependencies | uv add --dev pytest |
สำหรับ Library ที่ใช้แค่ตอนเทส |
| ลบ Package | uv remove pandas |
- |
| Sync Environment | uv sync |
ให้ venv ตรงกับ uv.lock (ใช้ตอน pull โค้ดเพื่อนมา) |
▶️ Running Code
| Action | Command |
|---|---|
| รันไฟล์ Python | uv run main.py |
| รันคำสั่ง module | uv run -m pytest |
| รัน Tool ชั่วคราว | uvx ruff check . |
Conclusion: ถึงเวลา Move on หรือยัง?
ถ้าคุณทำงานคนเดียว โปรเจกต์เล็กๆ pip ก็ยังใช้ได้ครับ ไม่ผิดอะไร แต่ถ้าคุณ:
- เบื่อกับการรอ install นานๆ
- อยากประหยัดงบ CI/CD
- อยากให้เครื่อง Dev สะอาด ไม่ต้องลง Python หลายตัว
- ทำงานร่วมกับ AI แล้วอยากได้ Workflow ที่เป็นระเบียบ
UV คือคำตอบที่คุ้มค่าแก่การลงทุนเรียนรู้ใหม่ครับ ลองเริ่มจากโปรเจกต์เล็กๆ วันนี้ แล้วตั้งค่า AI Context ตามที่ผมแนะนำ รับรองว่าชีวิต Dev จะลื่นขึ้นแบบรู้สึกได้ทันที