Thứ Tư, 9 tháng 9, 2026

Requirements.txt là gì? (Cái file nhỏ xíu nhưng có thể giúp người khác cài đúng cả "đống đồ" mà project của bạn cần.)

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 .venv

Sau đó:

python -m pip install requests
python -m pip install pandas
python -m pip install openpyxl

Project 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.5

Nhì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 openpyxl

Python 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 requests
python -m pip install pandas
python -m pip install openpyxl

Nế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.txt

Bạn đã activate Virtual Environment.

Sau đó cài package:

python -m pip install requests
python -m pip install pandas
python -m pip install openpyxl

Bây giờ chạy:

python -m pip freeze

Bạn có thể thấy:

openpyxl==3.1.5
pandas==2.2.3
requests==2.32.3

Python đ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.txt

Xong.

Bạn mở thư mục project.

Sẽ thấy:

my_project/
│
├── .venv/
├── main.py
└── requirements.txt

Mở 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 freeze

hiển thị:

requests==2.32.3
pandas==2.2.3

Thêm:

> requirements.txt

thì kết quả được ghi vào:

requirements.txt

Thay 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.3

Có 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.3

Ngày mai package có phiên bản mới:

requests==2.33.0

Nế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.3

giố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.3

Dấu:

==

nghĩa là:

Đúng phiên bản đó.

Ví dụ:

requests==2.32.3

thì muốn cài đúng:

2.32.3

Không phải:

2.31.0

Không phải:

2.33.0

9. 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.txt

Bạn không cần ngồi gõ:

pip install requests

rồi:

pip install pandas

rồi:

pip install openpyxl

rồi:

pip install ...

😵

Chỉ cần:

python -m pip install -r requirements.txt

Trong đó:

-r

có thể hiểu là:

"Đọc danh sách package từ file này."

Python sẽ đọc:

requirements.txt

và cài các package được liệt kê.

Ví dụ file:

requests==2.32.3
pandas==2.2.3
openpyxl==3.1.5

Python 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.md

Bạn muốn chạy project.

Bước 1: Tạo Virtual Environment

python -m venv .venv

Bước 2: Activate

Windows:

.venv\Scripts\activate

macOS/Linux:

source .venv/bin/activate

Bước 3: Cài dependencies

python -m pip install -r requirements.txt

Bước 4: Chạy project

Ví dụ:

python main.py

Vậy là xong.


11. .venvrequirements.txt đi với nhau như thế nào?

Đây là điểm rất đáng nhớ.

Bạn có:

.venv

và:

requirements.txt

Hai 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ật

Còn:

requirements.txt
↓
Danh sách nguyên liệu

12. 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
└── .gitignore

Nhưng .venv thường được thêm vào .gitignore:

.venv/

Sau đó bạn commit:

main.py
requirements.txt
.gitignore

Người khác clone project về.

Họ tự tạo:

python -m venv .venv

rồi:

python -m pip install -r requirements.txt

Thế 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.txt

như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.txt

Ví dụ:

python -m venv .venv

Activate.

Sau đó:

python -m pip install requests pandas

Khi project ổn:

python -m pip freeze > requirements.txt

Bạn có:

requirements.txt

Và 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 pandas

Nhưng requirements.txt chỉ có:

requests==2.32.3

Người khác chạy:

python -m pip install -r requirements.txt

Sau đó 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 pandas

Sau đó cập nhật:

python -m pip freeze > requirements.txt

16. pip listpip 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 list

Ví dụ:

Package    Version
---------- -------
pandas     2.2.3
requests   2.32.3

Nó 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 freeze

Ví dụ:

pandas==2.2.3
requests==2.32.3

Nó 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.5

Thế 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
└── .gitignore

Trong .gitignore:

.venv/

Trong requirements.txt:

requests==2.32.3
pandas==2.2.3
openpyxl==3.1.5

Người khác clone project.

Sau đó:

python -m venv .venv

Activate.

Rồi:

python -m pip install -r requirements.txt

Và 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.txt

mà lỗi, đừng hoảng.

Đi từng bước.

Kiểm tra Python

python --version

Kiểm tra pip

python -m pip --version

Kiểm tra đang dùng Virtual Environment chưa

Windows:

where python

macOS/Linux:

which python

Nế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.txt

Xem 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.txt

và nói:

python -m pip install -r requirements.txt

Xong.

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.txt

rồi viết đại:

xyz==999.999

😂

Hãy xác định:

  1. Project thực sự cần package nào?
  2. Package đó có được cài trong .venv không?
  3. Phiên bản nào phù hợp?
  4. 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 beautifulsoup4

nhưng trong code lại:

from bs4 import BeautifulSoup

Cho nên đừng nhìn:

import bs4

rồ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.txt

Như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.md

Người nhận:

python -m venv .venv

rồi:

python -m pip install -r requirements.txt

Xong.

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.txt

nó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.txt
  • Biết cài từ file:

python -m pip install -r requirements.txt

Virtual Environment

  • Hiểu .venv là môi trường riêng

  • Biết nên tạo requirements.txt từ đúng .venv

  • Biết không cần commit .venv

  • Biết .venv/ thường nằm trong .gitignore

Debug

  • Biết kiểm tra python --version

  • Biết kiểm tra python -m pip --version

  • Biết kiểm tra Python đang trỏ vào đâu

  • Biết đọc lỗi ModuleNotFoundError

  • Không hoảng khi pip install -r requirements.txt bá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.txt

là 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.txt cho 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.txt

Như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.txt

3️⃣ Cài từ nó thế nào?

python -m pip install -r requirements.txt

4️⃣ .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.txt

Một file nhỏ.

Một lệnh.

Đỡ rất nhiều chuyện.