1. Tại sao cần môi trường ảo trong Python?
Hình dung bạn đang quản lý một xưởng cơ khí: nếu tất cả dụng cụ đều để lộn xộn, việc sửa xe máy có thể nhầm dùng cờ lê cho máy tính. Tương tự, khi phát triển Python, mỗi dự án cần không gian độc lập để:
- Có phiên bản Python riêng
- Quản lý thư viện độc lập
- Tránh xung đột phiên bản
Các vấn đề điển hình được giải quyết:
- Xung đột phiên bản: Dự án A cần Flask 1.x, dự án B cần Flask 2.x
- Ô nhiễm môi trường: Gói thử nghiệm không làm rối môi trường sản phẩm
- Khôi phục chính xác: Dùng requirements.txt hoặc pyproject.toml để dựng lại môi trường
Một trường hợp điển hình: Dự án phân tích dữ liệu cũ dùng Python 3.6 với pandas 0.24. Khi chuyển sang máy mới chỉ có Python 3.9, việc dựng lại môi trường bằng venv giúp cứu dự án.
2. Công cụ gốc venv: Giải pháp nhẹ
Với Python 3.3+, venv là lựa chọn nhanh cho trường hợp cần gọn:
python -m venv /path/to/myenv --clear
Đặc điểm nổi bật:
- Không cần cài đặt: Có sẵn trong Python
- Tốc độ: Tạo môi trường dưới 200ms
- Dễ kiểm soát: Cấu trúc thư mục minh bạch
Cấu trúc điển hình:
myenv/
├── bin/
│ ├── python
│ ├── pip
│ └── activate
├── lib/python3.9/
│ └── site-packages/
└── pyvenv.cfg
Kích hoạt:
# Windows
.\myenv\Scripts\activate
# Linux/macOS
source myenv/bin/activate
Hạn chế:
- Quản lý thủ công qua pip
- Không có tệp lock phiên bản
- Thay đổi Python version cần tạo lại
Phù hợp: Demo nhanh, debug đơn giản, dạy học.
3. Pipenv: Quản lý thông minh
Pipenv kết hợp pip và venv với hai tệp quan trọng:
Pipfile (thay thế requirements.txt):
[[source]]
url = "https://pypi.org/simple"
[packages]
flask = ">=2.0.0,<3.0.0"
requests = "*"
[dev-packages]
pytest = "~6.2.5"
Pipfile.lock (đảm bảo phiên bản chính xác)
Lệnh cài đặt:
pipenv install --system
Ưu điểm:
- Phân tách dependencies/dev-dependencies
- Kiểm tra hash đảm bảo an toàn
- Tự động kích hoạt khi vào thư mục
Cảnh báo: Trên môi trường server, cần cài đặt với --system để tránh xung đột.
4. Conda: Giải pháp đa nền tảng
Khi cần thư viện biên dịch như OpenCV:
conda create -n cv_proj python=3.9
conda install -c conda-forge opencv numpy pandas
Tính năng nổi bật:
- Quản lý đa ngôn ngữ (C, R, Python)
- Gói binary đã biên dịch sẵn
- Dễ nhân bản môi trường
Cấu hình mirror nhanh:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://repo.anaconda.com/pkgs/main
Hạn chế:
- Kích thước lớn
- Dễ xung đột khi dùng chung pip
Phù hợp: Dự án AI, phân tích dữ liệu.
5. Poetry: Hiện đại và toàn diện
Tệp cấu hình pyproject.toml:
[tool.poetry]
name = "fastapi_app"
version = "0.1.0"
[tool.poetry.dependencies]
python = "3.9"
fastapi = "^0.70.0"
[tool.poetry.dev-dependencies]
black = "^21.12b"
Tính năng:
- Rollback tự động khi lỗi
- Cú pháp ràng buộc phiên bản thông minh
- Xuất bản package dễ dàng
Quy trình làm việc:
# Tạo dự án mới
poetry new backend_api --src
# Thêm phụ thuộc từ Git
poetry add git+https://gitlab.com/utils.git@dev
# Xuất requirements.txt
poetry export -f requirements.txt --output requirements.txt
Khuyến nghị:
- Dự án mới nên dùng Poetry
- Chuyển đổi từ requirements.txt: poetry init
6. So sánh và chọn lựa
| Tiêu chí | venv | Pipenv | Conda | Poetry |
|---|---|---|---|---|
| Độ phức tạp | ★☆☆☆ | ★★☆☆ | ★★★☆ | ★★☆☆ |
| Giải quyết phụ thuộc | ☆☆☆☆ | ★★☆☆ | ★★☆☆ | ★★★☆ |
| Hỗ trợ thư viện ngoài Python | × | × | ✔ | × |
| Quản lý nhiều phiên bản Python | × | × | ✔ | × |
| Triển khai sản phẩm | ★☆☆☆ | ★★☆☆ | ★★☆☆ | ★★★☆ |
| Hỗ trợ nhóm | ☆☆☆☆ | ★★★☆ | ★★☆☆ | ★★★☆ |
Khuyến nghị:
- Script cá nhân: venv
- Dự án Web: Pipenv/Poetry
- Khoa học dữ liệu: Conda
- Thư viện mở: Poetry
- Hệ thống đa ngôn ngữ: Conda + venv