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à nói với bạn ấy rằng: "Đ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 tươi (loại sợi nhỏ): 1 kg; Đậu hũ non: 4 miếng; Thịt heo 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.


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.


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 hay "khiêm tốn" hơn là chụp hình cả căn bếp rồi gửi 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."


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.


Tạo requirements.txt như thế nào?


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


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.


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ả

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


== 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

Làm sao cài tất cả package từ requirements.txt?

Sự "tiện văn lợi":

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.


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.


.venv và requirements.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

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.


Một lỗi rất hay gặp: requirements.txt quá "chiếm chỗ" 

Đâ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ỉ "khiêm tốn" cần:

requests


Bạn vô tư nói với người "trong nghề" 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.


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


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

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


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
Chỉ "đơn giản" thế thôi.

File nhỏ nhưng rất có võ. 


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.


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.


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.

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:

  • Project thực sự cần package nào?
  • Package đó có được cài trong .venv khô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.


Một lưu ý nhỏ về tên package và tên import

Python có một trò khá "trời ơi đất hỡi":

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.


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.


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 học
"Đâ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.


Chua thêm lần 2 : requirements.txt giống "list đồ đạc"

Hãy tưởng tượng bạn chuyển đến nhà mới.

Bạn không gửi cho người vận chuyển:

"Đây là căn nhà trong mơ của chúng ta."

rồi bê nguyên cái nhà với tường gạch, xi măng, đường ống nước.... 

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 căn cứ vào đó để thu xếp phương tiện, nhân công.

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.


Checklist chuẩn không cần chỉnh 

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 


FAQ nhanh

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 học:
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". 


Tóm lại



requirements.txt là gì?
File ghi danh sách dependency của Python project.

Tạo nó thế nào?
python -m pip freeze > requirements.txt

Cài từ nó thế nào?
python -m pip install -r requirements.txt

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

Tại sao nó quan trọng?
Vì thay vì nói:
"Bạn cài đặt 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.