Unified Python Project and Package Management
uv เป็นเครื่องมือจัดการ packages สำหรับภาษา Python ที่มีประสิทธิภาพสูงกว่าตัวจัดการแบบเดิมอย่าง pip โดยรวมเอาความสามารถในการจัดการ projects, packages/dependencies และ virtual environment ไว้ในเครื่องมือเดียว ช่วยให้การจัดการ Python project ง่ายขึ้น
$ curl -LsSf https://astral.sh/uv/install.sh | sh
$ uv init hello-world && cd "$_"
$ uv venv --python=3.13
$ source .venv/bin/activate
เหตุผลที่ควรใช้ uv
คุณกำลังปวดหัวกับสิ่งเหล่านี้อยู่ใช่หรือไม่?
- ต้องจัดการ Python project หลายโปรเจกต์ในเครื่องเดียว แต่ไม่อยากใช้ Docker
- แต่ละ project ใช้ Python version แตกต่างกัน
- ต้องการสร้าง package และส่งขึ้น repo ได้ง่าย
- ต้องการติดตั้ง dependencies ได้เร็วขึ้น
- ต้องการเครื่องมือที่มีประสิทธิภาพสูง
ถ้าใช่ แสดงว่า uv เป็นเครื่องมือที่เหมาะกับคุณ
จุดเด่นของ uv
- จัดการได้ทั้ง project, packages/dependencies และ virtual environment
- on-demand/short-lived virtualenv กล่าวคือ uv จะสร้าง virtualenv ให้เฉพาะตอนทำงานเท่านั้น
- สร้าง Python project พร้อม git repository ได้ในครั้งเดียว
- เลือกเวอร์ชันของ Python ได้
- สร้าง package แล้วส่งขึ้น repo ได้เลย
- ติดตั้ง dependencies ได้เร็วขึ้น
- เขียนด้วยภาษา Rust ทำให้มีประสิทธิภาพสูง
การติดตั้ง
โดยใช้ Standalone Installer
macOS and Linux:
$ curl -LsSf https://astral.sh/uv/install.sh | sh
Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
เพื่อให้ได้ฟีเจอร์ใหม่ ปลอดภัย และไร้บั๊ก:
$ uv self update
เริ่มต้นใช้งาน uv
สร้าง directory/folder เพื่อเก็บโปรเจกต์ใหม่ด้วยคำสั่ง
$ mkdir -p hello-world && cd "$_"
สร้าง Python Project
โดยระบุเวอร์ชั่นของ Python ที่ต้องการ และ uv จะสร้าง git repository ใน directory ปัจจุบัน
$ uv init --python=3.8 .
เปิดใช้ virtualenv
$ uv venv --python=3.8
$ source .venv/bin/activate
$ deactivate
จัดการเวอร์ชันของ Python
แสดงเวอร์ชัน
ดูว่ามี Python เวอร์ชันไหนที่ลงไว้ในเครื่องแล้ว และมีเวอร์ชันไหนที่สามารถติดตั้งได้
$ uv python list
ติดตั้งเฉพาะเวอร์ชันที่ต้องการ
$ uv python install 3.10 3.11 3.12
สามารถดาวน์โหลด ติดตั้ง และใช้งาน Python เวอร์ชันที่ต้องการใน virtualenv ได้อย่างง่ายดาย
$ uv venv --python=3.9
จัดการ Dependencies
ติดตั้ง package deps ได้ง่ายๆ เช่น ต้องการติดตั้ง requests ด้วยคำสั่ง
$ uv add requests
ใช้ pip-compatible interface
หรือถ้ายังคุ้นเคยกับการใช้ pip หรือโปรเจกต์เดิม workflow ยังพึ่ง pip อยู่
uv ก็มี pip-interface ที่ทำงานได้ไวกว่า pip ธรรมดาถึง 10-100 เท่า
$ uv pip install langchain
Resolved 29 packages in 762ms
Prepared 14 packages in 1.03s
Installed 29 packages in 258ms
ย้าย requirements.txt ไปยัง pyproject.toml
สร้างไฟล์ pyproject.toml
ด้วยคำสั่ง
$ uv init --python=3.12 .
ถ้าโปรเจกต์มีไฟล์ requirements.txt
อยู่แล้ว สามารถย้าย deps ทั้งหมดไปยัง pyproject.toml
ได้ด้วยคำสั่ง
$ uv add -r requirements.txt
เสร็จแล้วก็ติดตั้ง deps ทั้งหมดที่ระบุไว้ใน pyproject.toml
ด้วยคำสั่ง
$ uv sync
$ uv pip freeze > requirements.txt
รัน Python script
สร้าง script
$ uv init --script example.py --python 3.12
กรณี script ไม่มี deps
print("Hello world")
$ uv run hello.py
Hello world
กรณี script มี deps
เราสามารถใช้รูปแบบมาตรฐานของ Python ที่เรียกว่า inline script metadata เพื่อระบุ dependencies ได้ดังนี้
import requests
print(requests.get("https://astral.sh"))
สั่งให้ uv เพิ่ม declarative dependencies
$ uv add --script example.py requests
Updated `example.py`
ที่นี้เราก็จะรัน script ได้ด้วยคำสั่ง
$ uv run example.py
Reading inline script metadata from: example.py
Installed 5 packages in 12ms
<Response [200]>
uv นิยามการทำงานลักษณะนี้ว่า on-demand virtualenv หรือ short-lived virtualenv
ใช้งาน Tools ด้วย uvx
Tool เป็น Python package ประเภทหนึ่ง ที่เรียกใช้งานได้ผ่าน CLI
uvx เป็น package executor ที่ช่วยให้รัน tool แล้วใช้งานได้เลยทันที โดยไม่ต้องติดตั้งจริง
$ uvx pycowsay 'hello world!'
และถ้าใช้แล้วชอบ จะติดตั้งถาวรเลยก็ได้ด้วยคำสั่ง
$ uv tool install ruff
สร้าง Package และส่งขึ้น Repository
$ uv package create
$ uv package publish