Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Import tuyệt đối (Absolute) và Import tương đối (Relative) trong Python


Khi project lớn, cần import code từ file/package khác. Python hỗ trợ 2 kiểu import.

Cơ chế tìm kiếm import

  1. Cache sys.modules.
  2. Built-in modules.
  3. Thư mục trong sys.path (thư mục script hiện tại đầu tiên).
  4. Bind tên vào local scope.
  5. Không tìm thấy → ModuleNotFoundError.

Thứ tự import (PEP 8)

  1. Standard library (os, sys, json...)
  2. Third-party (numpy, requests, pandas...)
  3. Local application (from myapp import ...)

Absolute Import (Khuyên dùng)

Đường dẫn đầy đủ từ root package.

# Cấu trúc:
# myproject/
#   packageA/
#     moduleA1.py
#     moduleA2.py  (chứa hàm myfunc)

# Trong file bất kỳ:
from packageA.moduleA2 import myfunc
# Hoặc
import packageA.moduleA2
packageA.moduleA2.myfunc()
  • Rõ ràng, dễ đọc, không ambigu.
  • Có thể dài nếu package nested sâu.

Relative Import (Chỉ trong package)

Đường dẫn tương đối từ file hiện tại. Dấu chấm: . = package hiện tại, .. = parent package.

# Cấu trúc:
# myproject/
#   packageA/
#     moduleA1.py
#   packageB/
#     moduleB1.py  (muốn import moduleA1)

# Trong moduleB1.py:
from ..packageA import moduleA1
# .. = lên myproject, rồi vào packageA
  • Ngắn gọn, di chuyển project dễ dàng (refactor).
  • Rủi ro: ambiguous nếu cấu trúc thay đổi, không chạy được file trực tiếp (python moduleB1.py lỗi).

Khi nào dùng cái nào?

Tình huốngKhuyên dùng
Code chính, script, entry pointAbsolute import
Trong package, module sibling/parentRelative import (1-2 level)
Package sâu, nhiều cấpAbsolute import cho rõ ràng
Circular import riskRelative import có thể giúp

Kết luận

Mặc định dùng absolute import. Dùng relative import trong package nội bộ, giới hạn 1-2 cấp. Luôn tuân thủ PEP 8.