Python bài 12: Module, package, import và tổ chức chương trình
- 18-10-2026
- Toanngo92
- 0 Comments
Giáo trình Python miễn phí · Chương 6/12: Hàm, module và tổ chức chương trình · Bài 12/24.
Mục lục
Mục tiêu bài học
Chia chương trình thành nhiều tệp, chạy đúng điểm bắt đầu và quản lý thư viện có thể tái tạo.
Module là một đơn vị tái sử dụng
Một tệp .py có thể được import như module. Khi chương trình lớn hơn, tách phần tính toán, nhập xuất và cấu hình giúp thay đổi ít ảnh hưởng nhau. Import module bằng tên không có phần mở rộng .py.
Khi import, Python thực hiện mã ở cấp module trong lần nạp đầu và giữ module trong bộ nhớ đệm của phiên chạy. Do đó không đặt thao tác nhập bàn phím, gửi HTTP hoặc sửa cơ sở dữ liệu ở cấp ngoài nếu chúng không nên tự chạy khi import.
Ví dụ hai tệp
Tạo hoc_phi.py chứa phần tính toán. Tệp main.py là nơi điều phối và in kết quả. Các tệp cần ở cùng thư mục trong ví dụ này; các cách đóng gói phức tạp hơn có thể học sau.
# hoc_phi.py
def tinh_tong(so_buoi, don_gia):
return so_buoi * don_gia
# main.py
from hoc_phi import tinh_tong
def main():
tong = tinh_tong(4, 150000)
print(f"Tổng tiền: {tong:,} đồng")
if __name__ == "__main__":
main()
Chạy python main.py sẽ in Tổng tiền: 600,000 đồng. Điều kiện __name__ == "__main__" chỉ gọi main() khi tệp được chạy làm chương trình chính; khi import main, phần định nghĩa vẫn được nạp nhưng main() không tự chạy. main là tên theo quy ước, không phải từ khóa.
Package và đường dẫn import
Một package nhóm các module liên quan. Với cách tổ chức truyền thống cho người mới, tạo thư mục hoc_vien có __init__.py và các module bên trong, rồi import hoc_vien.xu_ly hoặc from hoc_vien.xu_ly import ham. Python còn hỗ trợ namespace package không có __init__.py, nhưng chưa cần dùng trong giai đoạn này.
Không sửa sys.path tùy tiện để che lỗi cấu trúc. Kiểm tra thư mục đang chạy, môi trường ảo và tên tệp bị trùng thư viện. Import có tên cụ thể thường rõ hơn import * và giảm nguy cơ ghi đè tên.
Quản lý thư viện và cấu hình
Lưu requirements.txt cho thư viện ngoài. Dùng thư viện chuẩn như pathlib hoặc json thì không cần pip install. Các giá trị bí mật như mật khẩu cơ sở dữ liệu nên đọc từ biến môi trường; đừng đưa trực tiếp vào module để rồi vô tình đăng công khai.
import os
from pathlib import Path
thu_muc = Path("du_lieu")
print(thu_muc.name)
print(os.getenv("HVC_MOI_TRUONG", "development"))
Kết quả:
du_lieu development
Lỗi thường gặp và lưu ý
- Không đặt tệp cùng tên với module chuẩn hoặc thư viện đang dùng.
- Circular import thường cho thấy hai module phụ thuộc lẫn nhau quá chặt; tách phần dùng chung thay vì import chéo ở mọi nơi.
Ghi nhớ
Tách chức năng khỏi điểm chạy, giữ import ít tác dụng phụ và quản lý thư viện theo môi trường. Cấu trúc đơn giản nhưng nhất quán giúp chương trình dễ kiểm thử hơn.
