Poetry và uv: quản lý dự án Python hiện đại

pip và requirements.txt vẫn chạy tốt, nhưng chúng không khóa được phiên bản phụ thuộc gián tiếp và không quản lý môi trường ảo giúp bạn. Poetry và uv sinh ra để giải quyết cả hai.

Vấn đề của requirements.txt

Bạn ghi requests==2.31.0, nhưng requests lại kéo theo urllib3, certifi… mà bạn không ghi phiên bản. Ba tháng sau cài lại, một thư viện con cập nhật và ứng dụng hỏng — trong khi file requirements không đổi một chữ.

Poetry: đầy đủ và ổn định

pip install poetry

poetry new duan-cua-toi      # tạo cấu trúc chuẩn
cd duan-cua-toi
poetry add requests pandas
poetry add --group dev pytest ruff
poetry install               # cài đúng theo poetry.lock
poetry run python main.py
# pyproject.toml
[project]
name = "duan-cua-toi"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = ["requests>=2.31", "pandas>=2.0"]

File poetry.lock ghi lại chính xác từng phiên bản của toàn bộ cây phụ thuộc. Commit nó vào Git để mọi máy và server đều cài y hệt nhau.

uv: rất nhanh

curl -LsSf https://astral.sh/uv/install.sh | sh

uv init duan-cua-toi
cd duan-cua-toi
uv add requests pandas
uv add --dev pytest
uv run python main.py         # tự tạo và dùng môi trường ảo
uv sync                       # cài đúng theo uv.lock

uv viết bằng Rust và thường nhanh hơn pip hàng chục lần. Nó còn quản lý luôn cả phiên bản Python:

uv python install 3.12
uv run --python 3.12 main.py

Nên chọn cái nào?

  • uv — dự án mới, CI cần nhanh, hoặc bạn phải làm việc với nhiều phiên bản Python. Đây là lựa chọn mặc định hợp lý hiện nay.
  • Poetry — dự án đã dùng sẵn, hoặc nhóm quen công cụ này và cần các tính năng xuất bản package đã trưởng thành.
  • pip + venv — script nhỏ, một file, không đáng thêm công cụ.

Điểm chung quan trọng nhất

Dù chọn gì, hãy commit file khóa (poetry.lock hoặc uv.lock) và đừng commit thư mục .venv. Đó là ranh giới giữa “chạy được trên máy tôi” và “chạy được ở mọi nơi”.

Lên đầu trang