Hiểu vì sao cần virtual environment (môi trường ảo)
Tạo và kích hoạt venv
Cài đặt, gỡ bỏ, quản lý thư viện bằng pip
Dùng requirements.txt để chia sẻ dự án
Thời lượng: ~4 giờ | Tuần: 24
1. Vấn đề: Dependency Hell
Giả sử bạn có 2 dự án:
Dự án
Yêu cầu
Dự án A (cũ, đang chạy production)
pandas phiên bản 1.5
Dự án B (mới)
pandas phiên bản 2.2
Nếu cài thư viện vào Python hệ thống, chỉ tồn tại một phiên bản duy nhất trên máy. Cài pandas 2.2 cho dự án B → dự án A hỏng.
Đây gọi là dependency hell (địa ngục phụ thuộc).
Vấn đề thứ hai — “Máy tôi chạy được”
Bạn viết chương trình dùng 5 thư viện. Gửi code cho đồng nghiệp → họ chạy báo ModuleNotFoundError. Không ai nhớ chính xác đã cài những gì, phiên bản nào.
2. Giải pháp: Virtual Environment
Virtual environment (môi trường ảo) là một bản Python độc lập nằm trong thư mục dự án, có bộ thư viện riêng.
D:\du_an\
├── du_an_a\
│ ├── .venv\ <- Python + pandas 1.5 riêng cho A
│ └── main.py
└── du_an_b\
├── .venv\ <- Python + pandas 2.2 riêng cho B
└── main.py
Hai dự án không ảnh hưởng nhau. Xóa thư mục .venv là gỡ sạch, không để lại gì trên hệ thống.
Liên hệ với công việc của bạn
Giống như việc bạn tạo nhiều database instance riêng cho từng môi trường (DEV, UAT, PRODUCTION) thay vì dùng chung một instance. Mỗi môi trường có phiên bản schema, dữ liệu riêng, không đụng nhau.
3. Tạo và dùng venv
Bước 1 — Tạo môi trường ảo
Mở terminal, cd vào thư mục dự án:
cd D:\hoc-python\du_an_ban_hang
python -m venv .venv
Lệnh này tạo thư mục .venv chứa bản Python riêng.
Vì sao tên là .venv?
Đây là quy ước phổ biến nhất. Dấu chấm đầu tên khiến nó ẩn trên Linux/macOS. Các IDE (VS Code, PyCharm) tự động nhận diện thư mục tên .venv hoặc venv.
Bước 2 — Kích hoạt (activate)
Windows — Command Prompt:
.venv\Scripts\activate
Windows — PowerShell:
.venv\Scripts\Activate.ps1
Linux / macOS:
source .venv/bin/activate
Khi kích hoạt thành công, dấu nhắc terminal có thêm (.venv):
Hoặc đơn giản hơn: dùng Command Prompt (cmd) thay vì PowerShell.
Kích hoạt trong VS Code
VS Code tự nhận diện .venv. Nếu không:
Ctrl + Shift + P → Python: Select Interpreter
Chọn dòng có ('.venv': venv)
Mở terminal mới trong VS Code — nó tự kích hoạt
4. pip — Trình quản lý thư viện
pip = Pip Installs Packages. Nó tải thư viện từ PyPI (Python Package Index — https://pypi.org), kho chứa hơn 500.000 gói.
4.1. Các lệnh cơ bản
# Cài đặtpip install requests# Cài phiên bản cụ thểpip install requests==2.31.0# Cài phiên bản tối thiểupip install "requests>=2.30"# Cài trong khoảngpip install "requests>=2.30,<3.0"# Nâng cấppip install --upgrade requests# Gỡ bỏpip uninstall requests# Liệt kê đã càipip list# Xem chi tiết một góipip show requests# Kiểm tra gói lỗi thờipip list --outdated# Nâng cấp chính pippython -m pip install --upgrade pip
Dùng python -m pip thay vì pip
python -m pip install requests
Cách này đảm bảo pip chạy đúng với bản Python đang kích hoạt. Nếu máy có nhiều bản Python, gõ pip trơn có thể cài nhầm chỗ.
4.2. Kiểm chứng môi trường ảo hoạt động
# Chưa kích hoạt venvpip list# -> Danh sách dài các gói hệ thống# Sau khi kích hoạt venv.venv\Scripts\activatepip list# -> Chỉ có pip và vài gói cơ bản — môi trường sạch
pip install -r requirements.txtpip freeze > requirements.lock.txt # Ghi lại phiên bản chính xác đã cài
Quy trình chuẩn khi nhận một dự án Python
git clone <dia-chi-repo> # hoặc giải nén file zipcd <thu-muc-du-an>python -m venv .venv.venv\Scripts\activatepip install -r requirements.txtpython main.py
Bốn dòng này là “nghi thức” bạn sẽ lặp lại suốt sự nghiệp.
6. Cấu trúc dự án Python chuẩn
du_an_ban_hang/
├── .venv/ <- Môi trường ảo (KHÔNG chia sẻ, KHÔNG commit lên Git)
├── .gitignore <- Danh sách file bỏ qua khi dùng Git
├── README.md <- Hướng dẫn cài đặt và sử dụng
├── requirements.txt <- Danh sách thư viện
├── main.py <- Điểm khởi chạy
├── cau_hinh.py
├── src/ <- Mã nguồn
│ ├── __init__.py
│ ├── tien_ich.py
│ ├── nghiep_vu.py
│ └── models.py
├── du_lieu/ <- File dữ liệu
│ └── khach_hang.csv
└── bao_cao/ <- Kết quả xuất ra
File .gitignore
# Môi trường ảo.venv/venv/env/# Bytecode Python__pycache__/*.py[cod]*.pyc# File cấu hình cá nhân.envcau_hinh_local.json# IDE.vscode/.idea/# Dữ liệu và kết quảbao_cao/*.csv*.log# Hệ điều hànhThumbs.db.DS_Store
KHÔNG BAO GIỜ commit thư mục .venv lên Git
Nó nặng hàng trăm MB, chứa file nhị phân riêng cho từng hệ điều hành, và hoàn toàn tái tạo được từ requirements.txt. Chia sẻ requirements.txt là đủ.
File README.md
# Hệ thống quản lý bán hàng## Yêu cầu- Python 3.13 trở lên## Cài đặt```bashpython -m venv .venv.venv\Scripts\activatepip install -r requirements.txt```## Chạy```bashpython main.py```## Cấu trúc- `main.py` — điểm khởi chạy- `src/nghiep_vu.py` — logic tính toán- `du_lieu/` — file dữ liệu đầu vào
from tabulate import tabulatedu_lieu = [ ["KH001", "Nguyễn Văn A", 5_000_000], ["KH002", "Trần Thị B", 12_000_000], ["KH003", "Lê Văn C", 0],]print(tabulate(du_lieu, headers=["Mã KH", "Tên khách hàng", "Công nợ"], tablefmt="grid", floatfmt=",.0f"))
+---------+------------------+-----------+
| Mã KH | Tên khách hàng | Công nợ |
+=========+==================+===========+
| KH001 | Nguyễn Văn A | 5000000 |
+---------+------------------+-----------+
| KH002 | Trần Thị B | 12000000 |
+---------+------------------+-----------+
| KH003 | Lê Văn C | 0 |
+---------+------------------+-----------+
8. An toàn khi cài thư viện
Không phải gói nào trên PyPI cũng an toàn
Bất kỳ ai cũng đăng gói lên PyPI được. Đã có nhiều vụ typosquatting — kẻ xấu đăng gói tên gần giống gói phổ biến (requets thay vì requests) chứa mã độc.
Gửi thư mục (không kèm .venv) cho một người khác, xem họ có tự chạy được không
Bài 6 — Khám phá PyPI
Vào https://pypi.org, tìm hiểu 3 thư viện bất kỳ liên quan tới công việc của bạn (kế toán, Excel, database). Với mỗi thư viện ghi lại: tên, công dụng, số lượt tải/tháng, ngày cập nhật gần nhất, link GitHub.
10. Tự kiểm tra
Tôi giải thích được vì sao cần môi trường ảo
Tôi tạo, kích hoạt, thoát được venv
Tôi biết kiểm chứng venv đang hoạt động bằng where python
Tôi biết các lệnh pip install, list, show, uninstall, freeze
Tôi biết tạo và dùng requirements.txt
Tôi biết không được commit .venv lên Git
Tôi biết cách kiểm tra một thư viện có đáng tin không