Hãy tưởng tượng bạn rủ nhóm bạn thân về nhà làm món Bún đậu mắm tôm: Bạn viết ra một tờ giấy nhớ (file requirements.txt) đưa cho một đứa bạn và bảo: "Đi siêu thị mua đúng ngần này thứ về thì mới làm được bún đậu nhé!"Tờ giấy nhớ đó sẽ ghi cụ thể:Bún lá (loại sợi nhỏ): 1 kg; Đậu hũ non: 4 miếng; Thịt ba chỉ: 0.5 kg; Mắm tôm Thanh Hóa: 1 chai; Chanh/Quất, Ớt, Đường..
Bạn biết tạo một môi trường riêng cho từng project:python -m venv .venvSau đó:
python -m pip install requests
python -m pip install pandas
python -m pip install openpyxlProject chạy ngon lành.
Bạn nén cả project gửi cho đồng nghiệp.
Người kia mở lên:
"Ủa... sao máy tui chạy không được?" 😭
Bạn hỏi:
"Bạn đã cài requests chưa?"
"Chưa."
"pandas?"
"Chưa."
"openpyxl?"
"Cũng chưa."
"Vậy cài đi."
"Cài cái nào? Phiên bản nào?"
...
Và thế là bắt đầu một cuộc trò chuyện dài hơn cả project. 😭
Đây chính là lúc requirements.txt xuất hiện.
1. requirements.txt là gì?
Nói đơn giản:
requirements.txt là một file ghi lại danh sách các Python package mà project cần để chạy.
Ví dụ:
requests==2.32.3
pandas==2.2.3
openpyxl==3.1.5Nhìn chẳng có gì ghê gớm.
Chỉ là một file text.
Nhưng nó giống như:
🛒 Danh sách đi chợ của project.
Project cần:
- requests
- pandas
- openpyxl
thì requirements.txt ghi lại.
Người khác chỉ cần nhìn danh sách này và nói:
"À, project này cần mấy món này."
Sau đó chạy một lệnh.
2. Ví dụ đời thường: Nấu một món ăn 🍳
Hãy tưởng tượng bạn nấu một món ăn rất ngon.
Bạn gửi cho bạn mình:
"Đây là món tôi nấu."
Nhưng bạn chỉ gửi hình ảnh món ăn.
Người kia nhìn:
"Ngon đấy!"
"Cho tôi công thức với."
Bạn trả lời:
"Có thịt."
"Bao nhiêu?"
"Có rau."
"Rau gì?"
"Có gia vị."
"Gia vị gì??"
😭
Không ổn.
Tốt hơn là bạn gửi:
500g thịt
200g rau
2 quả trứng
1 thìa nước mắm
1 thìa đường
...Đó chính là tinh thần của:
requirements.txt.venv = cả căn bếp
requirements.txt = danh sách nguyên liệu
Bạn không cần gửi cả căn bếp cho người khác.
Chỉ cần nói:
"Muốn nấu món này thì chuẩn bị đúng mấy món dưới đây."
3. Tại sao Python project cần requirements.txt?
Vì một project Python thường không chỉ dùng Python thuần.
Ví dụ project của bạn có:
import requests
import pandas
import openpyxlPython mặc định không nhất thiết có sẵn những package này.
Bạn phải cài chúng.
Ví dụ:
python -m pip install requestspython -m pip install pandaspython -m pip install openpyxlNếu project nhỏ thì còn nhớ được.
Nhưng project lớn thì sao?
Có thể có:
requests
pandas
numpy
openpyxl
beautifulsoup4
flask
sqlalchemy
...10 package.
20 package.
50 package.
Lúc này nếu hỏi:
"Project này cần cài những gì?"
Bạn không thể trả lời:
"Ờ... để tôi nhớ." 😭
Đó là lúc requirements.txt trở thành vị cứu tinh.
4. Tạo requirements.txt như thế nào?
Đây là phần quan trọng nhất.
Giả sử bạn đang ở trong project:
my_project/
│
├── .venv/
├── main.py
└── requirements.txtBạn đã activate Virtual Environment.
Sau đó cài package:
python -m pip install requestspython -m pip install pandaspython -m pip install openpyxlBây giờ chạy:
python -m pip freezeBạn có thể thấy:
openpyxl==3.1.5
pandas==2.2.3
requests==2.32.3Python đang nói:
"Đây là những package đang được cài trong môi trường hiện tại."
5. Xuất danh sách thành requirements.txt
Thay vì chỉ xem màn hình, bạn có thể lưu nó vào file:
python -m pip freeze > requirements.txtXong.
Bạn mở thư mục project.
Sẽ thấy:
my_project/
│
├── .venv/
├── main.py
└── requirements.txtMở requirements.txt:
openpyxl==3.1.5
pandas==2.2.3
requests==2.32.3🎉
Bạn vừa tạo "danh sách đi chợ" cho project.
6. Dấu > trong lệnh có nghĩa gì?
Có một chỗ người mới rất dễ thắc mắc:
python -m pip freeze > requirements.txt> ở đây có thể hiểu đơn giản là:
Đưa kết quả của lệnh vào file.
Ví dụ:
python -m pip freezehiển thị:
requests==2.32.3
pandas==2.2.3Thêm:
> requirements.txtthì kết quả được ghi vào:
requirements.txtThay vì:
Màn hình ← kết quảthì thành:
requirements.txt ← kết quả7. requirements.txt có phiên bản package
Bạn sẽ thường thấy:
requests==2.32.3Có nghĩa:
Project này sử dụng requests phiên bản 2.32.3.
Tại sao phải quan tâm phiên bản?
Vì package có thể thay đổi theo thời gian.
Ví dụ hôm nay:
requests==2.32.3Ngày mai package có phiên bản mới:
requests==2.33.0Nếu code của bạn phụ thuộc vào cách hoạt động của phiên bản cũ, việc tự động cài phiên bản mới đôi khi có thể gây vấn đề.
Vì vậy:
requests==2.32.3giống như nói:
"Mua đúng loại này nhé, đừng tự ý đổi sang loại khác." 😄
8. == có ý nghĩa gì?
Ví dụ:
pandas==2.2.3Dấu:
==nghĩa là:
Đúng phiên bản đó.
Ví dụ:
requests==2.32.3thì muốn cài đúng:
2.32.3Không phải:
2.31.0Không phải:
2.33.09. Làm sao cài tất cả package từ requirements.txt?
Đây mới là phần cực kỳ tiện.
Bạn nhận một project từ người khác.
Project có:
requirements.txtBạn không cần ngồi gõ:
pip install requestsrồi:
pip install pandasrồi:
pip install openpyxlrồi:
pip install ...😵
Chỉ cần:
python -m pip install -r requirements.txtTrong đó:
-rcó thể hiểu là:
"Đọc danh sách package từ file này."
Python sẽ đọc:
requirements.txtvà cài các package được liệt kê.
Ví dụ file:
requests==2.32.3
pandas==2.2.3
openpyxl==3.1.5Python sẽ lần lượt cài chúng.
10. Quy trình thực tế từ A → Z
Giả sử bạn nhận một project:
weather_app/
│
├── main.py
├── requirements.txt
└── README.mdBạn muốn chạy project.
Bước 1: Tạo Virtual Environment
python -m venv .venvBước 2: Activate
Windows:
.venv\Scripts\activatemacOS/Linux:
source .venv/bin/activateBước 3: Cài dependencies
python -m pip install -r requirements.txtBước 4: Chạy project
Ví dụ:
python main.pyVậy là xong.
11. .venv và requirements.txt đi với nhau như thế nào?
Đây là điểm rất đáng nhớ.
Bạn có:
.venvvà:
requirements.txtHai thứ này có liên quan nhưng không giống nhau.
.venv
Là môi trường Python thực tế.
Nó chứa:
- Python environment
- package
- dependency
- các file liên quan đến môi trường
requirements.txt
Là danh sách mô tả:
"Project này cần những package nào và phiên bản nào."
Có thể hình dung:
.venv
↓
Căn bếp thậtCòn:
requirements.txt
↓
Danh sách nguyên liệu12. Có cần gửi .venv cho người khác không?
Thông thường:
Không nên.
Bạn không cần gửi cả thư mục:
.venv/cho Git hoặc đồng nghiệp.
Thay vào đó, project thường có:
my_project/
│
├── .venv/
├── main.py
├── requirements.txt
└── .gitignoreNhưng .venv thường được thêm vào .gitignore:
.venv/Sau đó bạn commit:
main.py
requirements.txt
.gitignoreNgười khác clone project về.
Họ tự tạo:
python -m venv .venvrồi:
python -m pip install -r requirements.txtThế là có môi trường riêng.
13. Một lỗi rất hay gặp: requirements.txt quá "bự" 😭
Đây là một cái bẫy.
Bạn chạy:
pip freeze > requirements.txtnhưng bạn đang đứng trong global Python environment thay vì .venv.
Kết quả có thể là một file dài ngoằng:
beautifulsoup4==...
numpy==...
pandas==...
requests==...
flask==...
django==...
jupyter==...
matplotlib==...
...Trong khi project của bạn chỉ cần:
requests😅
Bạn vô tình nói với người khác:
"Để chạy project này, cài cả đống thứ này nhé."
Người khác:
"Project của bạn làm gì mà cần dữ vậy?"
Bạn:
"Không biết."
😂
Vì vậy:
Nên tạo requirements.txt từ đúng Virtual Environment của project.
Đó cũng chính là lý do Bài #67 về Virtual Environment quan trọng.
14. Một quy trình tốt cho project Python
Bạn có thể hình thành thói quen:
Project mới
↓
Tạo .venv
↓
Activate
↓
Cài package cần thiết
↓
Code
↓
pip freeze
↓
requirements.txtVí dụ:
python -m venv .venvActivate.
Sau đó:
python -m pip install requests pandasKhi project ổn:
python -m pip freeze > requirements.txtBạn có:
requirements.txtVà project đã có "danh sách nguyên liệu".
15. Nếu requirements.txt bị thiếu thì sao?
Ví dụ code có:
import requests
import pandasNhưng requirements.txt chỉ có:
requests==2.32.3Người khác chạy:
python -m pip install -r requirements.txtSau đó chạy chương trình.
Có thể gặp:
ModuleNotFoundError: No module named 'pandas'Python đang nói:
"Bạn bảo tôi mua requests thôi mà giờ lại bắt tôi dùng pandas?" 😭
Lúc này phải kiểm tra lại dependency.
Cài package còn thiếu:
python -m pip install pandasSau đó cập nhật:
python -m pip freeze > requirements.txt16. pip list và pip freeze khác nhau thế nào?
Người mới rất dễ thấy hai lệnh này rồi hỏi:
"Ủa, hai ông này đều liệt kê package mà?"
Đúng.
Nhưng mục đích thường khác nhau.
pip list
Dùng để xem những package đang được cài:
python -m pip listVí dụ:
Package Version
---------- -------
pandas 2.2.3
requests 2.32.3Nó giống như:
"Trong nhà hiện đang có những món gì?"
pip freeze
Thường tiện cho việc tạo file requirements:
python -m pip freezeVí dụ:
pandas==2.2.3
requests==2.32.3Nó giống như:
"Ghi danh sách nguyên liệu theo format để người khác có thể cài lại."
17. requirements.txt không phải là "database của project"
Một hiểu lầm khác:
"requirements.txt có chứa toàn bộ code của project không?"
Không.
Nó không chứa:
- code Python của bạn
- database
- dữ liệu người dùng
- file ảnh
- cấu hình bí mật
- password
- API key
Nó chủ yếu là:
Danh sách dependency của project.
Ví dụ:
requests==2.32.3
pandas==2.2.3
openpyxl==3.1.5Thế thôi.
File nhỏ nhưng rất có võ. 💪
18. Một project Python "gọn gàng" có thể trông như thế này
my_project/
│
├── .venv/
│
├── main.py
├── requirements.txt
├── README.md
└── .gitignoreTrong .gitignore:
.venv/Trong requirements.txt:
requests==2.32.3
pandas==2.2.3
openpyxl==3.1.5Người khác clone project.
Sau đó:
python -m venv .venvActivate.
Rồi:
python -m pip install -r requirements.txtVà bắt đầu code.
Đây chính là một trong những thói quen cơ bản nhưng rất hữu ích khi làm Python project.
19. Debug khi pip install -r requirements.txt bị lỗi
Nếu chạy:
python -m pip install -r requirements.txtmà lỗi, đừng hoảng.
Đi từng bước.
Kiểm tra Python
python --versionKiểm tra pip
python -m pip --versionKiểm tra đang dùng Virtual Environment chưa
Windows:
where pythonmacOS/Linux:
which pythonNếu đường dẫn không trỏ về .venv như mong đợi, có thể bạn chưa activate đúng môi trường.
Kiểm tra requirements.txt
Mở file:
requirements.txtXem có package lạ hoặc phiên bản bất thường không.
Cài lại
python -m pip install -r requirements.txtĐừng vội:
"Python hỏng rồi!" 😭
Nhiều khi Python chẳng hỏng gì.
Chỉ là:
Bạn đang đứng nhầm phòng.
20. requirements.txt đặc biệt hữu ích khi làm việc nhóm
Giả sử bạn và đồng nghiệp cùng làm một project.
Bạn:
Python + requests + pandas + openpyxlĐồng nghiệp mới vào project.
Thay vì nhắn:
"Cài requests."
"Cài pandas."
"À còn openpyxl."
"Nhớ đúng version nha."
Bạn chỉ cần:
requirements.txtvà nói:
python -m pip install -r requirements.txtXong.
Một file nhỏ.
Một lệnh.
Cả project có thể nhanh chóng có đủ dependency cần thiết.
21. Một điều quan trọng: đừng chỉnh requirements.txt bằng cách "đoán mò"
Ví dụ bạn gặp:
ModuleNotFoundError: No module named 'xyz'Đừng lập tức mở:
requirements.txtrồi viết đại:
xyz==999.999😂
Hãy xác định:
- Project thực sự cần package nào?
- Package đó có được cài trong
.venvkhông? - Phiên bản nào phù hợp?
- Code có thực sự import package đó không?
Sau đó mới cập nhật requirements.
22. Một lưu ý nhỏ về tên package và tên import
Python có một trò khá "tưng tửng":
Tên package cài bằng pip đôi khi không giống hoàn toàn tên import trong code.
Ví dụ bạn có thể cài:
pip install beautifulsoup4nhưng trong code lại:
from bs4 import BeautifulSoupCho nên đừng nhìn:
import bs4rồi nhất quyết:
pip install bs4😅
Khi gặp ModuleNotFoundError, nên kiểm tra package thực tế cần cài thay vì đoán theo tên import.
23. Có phải project Python nào cũng bắt buộc có requirements.txt?
Không.
Python không bắt buộc mọi project phải có:
requirements.txtNhưng với project có dependency bên ngoài, đây là một file rất hữu ích và rất phổ biến.
Đặc biệt khi:
- làm project nhóm
- đưa code lên Git
- deploy lên server
- chuyển máy
- chia sẻ source code
- cần dựng lại project sau này
Bạn sẽ rất biết ơn cái file bé xíu này.
24. Chua thêm 😆: Đừng gửi cả căn bếp cho người ta
Có hai cách chia sẻ project.
Cách 1 – Người mới
"Đây project của tôi."
Gửi:
my_project/
└── .venv/
├── hàng trăm file
├── hàng nghìn file
└── đủ thứ...Người nhận:
"Ủa gửi nguyên cái bếp qua nhà tôi luôn hả?" 😭
Cách 2 – Gọn gàng
Bạn gửi:
main.py
requirements.txt
README.mdNgười nhận:
python -m venv .venvrồi:
python -m pip install -r requirements.txtXong.
Bạn chỉ gửi:
Danh sách đi chợ.
Người ta tự dựng:
Căn bếp.
Đó chính là tư duy rất quan trọng khi làm project.
25. Chua thêm lần 2 😆: requirements.txt giống "list đồ cưới"
Hãy tưởng tượng bạn chuyển nhà.
Bạn không gửi cho người bạn:
"Đây là cái nhà tôi."
rồi bê nguyên cái nhà qua. 😂
Bạn gửi danh sách:
1 cái giường
1 cái bàn
4 cái ghế
1 cái tủ
...Người kia mua lại.
Python project cũng tương tự.
requirements.txtnói:
"Project này cần những món này."
Còn:
.venv/là:
"Đây là môi trường tôi đã dựng sẵn."
Hai khái niệm khác nhau.
26. Checklist: requirements.txt đã hiểu chưa? ✅
Cơ bản
Biết requirements.txt là gì
Biết nó dùng để ghi dependency
Biết package có thể đi kèm version
Hiểu
==Biết
pip freeze
Thực hành
Biết tạo file:
python -m pip freeze > requirements.txtBiết cài từ file:
python -m pip install -r requirements.txtVirtual Environment
Hiểu
.venvlà môi trường riêngBiết nên tạo requirements.txt từ đúng
.venvBiết không cần commit
.venvBiết
.venv/thường nằm trong.gitignore
Debug
Biết kiểm tra
python --versionBiết kiểm tra
python -m pip --versionBiết kiểm tra Python đang trỏ vào đâu
Biết đọc lỗi
ModuleNotFoundErrorKhông hoảng khi
pip install -r requirements.txtbáo lỗi 😆
27. FAQ – Những câu hỏi người mới hay hỏi
❓ requirements.txt có phải file Python không?
Không.
Nó chỉ là một file text.
Ví dụ:
requirements.txt❓ Có thể đặt tên khác không?
Về mặt kỹ thuật, bạn có thể dùng tên file khác.
Nhưng:
requirements.txtlà tên rất phổ biến và các công cụ/tài liệu Python thường quen với tên này.
Với người mới:
Cứ dùng
requirements.txtcho dễ hiểu.
❓ Có cần gửi .venv cho người khác không?
Thông thường không.
Bạn gửi source code + requirements.txt.
Người nhận tự tạo .venv và cài dependency.
❓ Có phải mỗi lần cài package đều phải sửa requirements.txt bằng tay?
Không nhất thiết.
Bạn có thể cập nhật bằng:
python -m pip freeze > requirements.txtNhưng nhớ:
Hãy chạy lệnh trong đúng Virtual Environment của project.
❓ pip freeze có phải chỉ dùng để xem package không?
Không chỉ vậy.
Bạn có thể dùng:
python -m pip freezeđể xem dependency hiện tại.
Và:
python -m pip freeze > requirements.txtđể xuất danh sách thành file.
❓ requirements.txt có giúp project chạy trên mọi máy không?
Không đảm bảo 100%.
Nó giúp tái tạo Python dependencies dễ hơn.
Nhưng project còn có thể phụ thuộc vào:
- phiên bản Python
- hệ điều hành
- database
- environment variables
- API key
- file cấu hình
- phần mềm hệ thống
Cho nên:
requirements.txt rất hữu ích, nhưng không phải "cây đũa thần". 🪄
28. Tóm lại
Nếu chỉ nhớ 5 điều của bài này, hãy nhớ:
1️⃣ requirements.txt là gì?
File ghi danh sách dependency của Python project.
2️⃣ Tạo nó thế nào?
python -m pip freeze > requirements.txt3️⃣ Cài từ nó thế nào?
python -m pip install -r requirements.txt4️⃣ .venv và requirements.txt khác nhau thế nào?
.venv
↓
Môi trường thực tếrequirements.txt
↓
Danh sách package cần có5️⃣ Tại sao nó quan trọng?
Vì thay vì nói:
"Bạn cài giúp tôi khoảng 15 package nhé, tôi nhớ mang máng..." 😭
Bạn chỉ cần:
python -m pip install -r requirements.txtMột file nhỏ.
Một lệnh.
Đỡ rất nhiều chuyện.