Làm thế nào Python tìm thấy các mô -đun của nó
Được thực hiện nghiêm ngặt, một mô -đun là một tệp Python duy nhất, trong khi gói là một thư mục chứa các tệp python, kèm theo một tệp (có thể trống) có tên import sys sys.path.insert(0, "/path/to/your/package_or_module") 6, để nói với Python rằng đó là một gói để nhập các mô -đun. Trong cả hai trường hợp, các mô -đun cần tiện ích mở rộng import sys sys.path.insert(0, "/path/to/your/package_or_module") 7 của chúng, nhưng nhập chúng được thực hiện mà không có (xem thêm bên dưới).
Theo mặc định, Python tìm kiếm các mô -đun và gói của nó trong import sys sys.path.insert(0, "/path/to/your/package_or_module") 8.
Để tìm hiểu những gì được bao gồm trong $ PythonPath, hãy chạy mã sau trong Python (3):
import sys print(sys.path)Cách thêm thư mục
Thỉnh thoảng
Từ trong tệp Python, thỉnh thoảng bạn có thể thêm (các) đường dẫn vào đường dẫn mặc định bằng cách thêm các dòng sau vào phần đầu của ứng dụng Python hoặc tập lệnh:
import sys sys.path.insert(0, "/path/to/your/package_or_module")Ví dụ:
Nếu tôi có một thư mục: import sys sys.path.insert(0, "/path/to/your/package_or_module") 9 và tôi muốn nhập tệp import sys sys.path.insert(0, "/home/myname/pythonfiles") 0, nằm trong thư mục đó, tôi thêm phần này vào phần đầu của mã của tôi:
import sys sys.path.insert(0, "/home/myname/pythonfiles")Và tôi chỉ có thể nhập tệp import sys sys.path.insert(0, "/home/myname/pythonfiles") 0 bằng cách:
import module_1Khi tôi tạo một gói và muốn nhập (các) mô -đun từ gói, tôi cần tạo một thư mục trong import sys sys.path.insert(0, "/path/to/your/package_or_module") 8, chứa các mô -đun, kèm theo một tệp (có thể trống) được gọi là import sys sys.path.insert(0, "/path/to/your/package_or_module") 6
Ví dụ:
Nếu tôi có một thư mục: import sys sys.path.insert(0, "/path/to/your/package_or_module") 9 và tôi muốn nhập tệp import sys sys.path.insert(0, "/home/myname/pythonfiles") 0, nằm trong thư mục đó, tôi thêm phần này vào phần đầu của mã của tôi:
from <packagename> import module_2Và tôi chỉ có thể nhập tệp import sys sys.path.insert(0, "/home/myname/pythonfiles") 0 bằng cách:
Khi tôi tạo một gói và muốn nhập (các) mô -đun từ gói, tôi cần tạo một thư mục trong import sys sys.path.insert(0, "/path/to/your/package_or_module") 8, chứa các mô -đun, kèm theo một tệp (có thể trống) được gọi là import sys sys.path.insert(0, "/path/to/your/package_or_module") 6
export PYTHONPATH=$PYTHONPATH:/path/you/want/to/addĐể nhập từ gói (thư mục) được gọi là import sys sys.path.insert(0, "/home/myname/pythonfiles") 4 trong import sys sys.path.insert(0, "/path/to/your/package_or_module") 9, hãy thêm đường dẫn import sys sys.path.insert(0, "/path/to/your/package_or_module") 9 vào import sys sys.path.insert(0, "/path/to/your/package_or_module") 8 của bạn, như trong ví dụ 1 và nhập mô -đun có tên import sys sys.path.insert(0, "/home/myname/pythonfiles") 8 (bên trong thư mục gói) chỉ đơn giản với: ``
Thêm thư mục vào import sys sys.path.insert(0, "/path/to/your/package_or_module") 8 vĩnh viễn:
import packagename.subfolder.module_3Thêm dòng sau vào tệp import module_1 0 của bạn.
Thư mục con
Từ trong một gói, các thư mục con không được bao gồm như thế; Bạn cần phải "chuỗi" các thư mục. Để nhập mô -đun import module_1 1, thư mục bên trong thư mục bên trong import module_1 3:
Example:
Với thực tế là tất cả các thư mục con trong gói bao gồm tệp import sys sys.path.insert(0, "/path/to/your/package_or_module") 6 của riêng chúng.
import moduleTôi biết chủ đề này hơi cũ, nhưng tôi đã mất một thời gian để đi đến trung tâm của điều này, vì vậy tôi muốn chia sẻ.
Trong dự án của mình, tôi đã có tập lệnh chính trong thư mục cha và để phân biệt các mô-đun, tôi đặt tất cả các mô-đun hỗ trợ trong một bộ lọc phụ gọi là "mô-đun". Trong tập lệnh chính của tôi, tôi nhập các mô -đun này như thế này (đối với một mô -đun có tên là Báo cáo.py):
from modules.report import report, reportErrorNếu tôi gọi kịch bản chính của mình, điều này hoạt động. Tuy nhiên, tôi muốn kiểm tra từng mô -đun bằng cách bao gồm một import module_1 7 trong mỗi mô -đun và gọi trực tiếp, như:
python modules/report.pyBây giờ Python phàn nàn rằng nó không thể tìm thấy "một mô -đun gọi là mô -đun". Điều quan trọng ở đây là, theo mặc định, Python bao gồm thư mục của tập lệnh trong đường dẫn tìm kiếm của nó, nhưng không phải là CWD. Vì vậy, những gì lỗi này nói, thực sự, là "Tôi không thể tìm thấy một thư mục con mô -đun". IS vì không có thư mục con "mô -đun" từ thư mục trong đó mô -đun báo cáo.py nằm.
Tôi thấy rằng giải pháp gọn gàng nhất cho việc này là nối CWD trong đường dẫn tìm kiếm Python bằng cách bao gồm điều này ở đầu:
import sys sys.path.insert(0, "/path/to/your/package_or_module") 0Bây giờ Python tìm kiếm CWD (thư mục hiện tại), tìm thấy phần phụ "mô-đun" và tất cả đều tốt.
Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu cách đường dẫn tìm kiếm mô -đun hoạt động trong Python khi bạn nhập mô -đun vào một chương trình.: in this tutorial, you’ll learn how the module search path works in Python when you import a module into a program.
Giới thiệu về đường dẫn tìm kiếm mô -đun Python
Khi bạn nhập một mô -đun trong một chương trình:
import sys sys.path.insert(0, "/path/to/your/package_or_module") 1Python sẽ tìm kiếm tệp import module_1 6 từ các nguồn sau:
- Thư mục hiện tại mà chương trình thực thi.
- Một danh sách các thư mục được chỉ định trong biến môi trường PythonPath, nếu bạn đặt nó trước đó.
- Một danh sách phụ thuộc vào cài đặt các thư mục mà bạn đã cấu hình khi bạn cài đặt Python.
Python lưu trữ đường dẫn tìm kiếm kết quả trong biến import module_1 9 xuất phát từ mô -đun from <packagename> import module_2 0.
Chương trình sau đây hiển thị đường dẫn tìm kiếm mô -đun hiện tại:
import sys sys.path.insert(0, "/path/to/your/package_or_module") 2Ở đây, một đầu ra mẫu trên Windows:
import sys sys.path.insert(0, "/path/to/your/package_or_module") 3Và sau đây là đầu ra mẫu trên Linux:
import sys sys.path.insert(0, "/path/to/your/package_or_module") 4Để đảm bảo Python luôn có thể tìm thấy import module_1 6, bạn cần phải:
- Đặt import module_1 6 vào thư mục nơi chương trình sẽ thực thi.
- Bao gồm thư mục chứa import module_1 6 trong biến môi trường from <packagename> import module_2 4. Hoặc bạn có thể đặt import module_1 6 vào một trong các thư mục có trong biến from <packagename> import module_2 4.
- Đặt import module_1 6 vào một trong các thư mục phụ thuộc vào cài đặt.
Sửa đổi đường dẫn tìm kiếm mô -đun Python khi chạy
Python cho phép bạn sửa đổi đường dẫn tìm kiếm mô -đun khi chạy bằng cách sửa đổi biến import module_1 9. Điều này cho phép bạn lưu trữ các tệp mô -đun trong bất kỳ thư mục nào bạn chọn.
Vì import module_1 9 là một danh sách, bạn có thể nối một con đường tìm kiếm vào nó.
Ví dụ sau đây thêm export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add 0 vào đường dẫn tìm kiếm và sử dụng mô -đun export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add 1 được lưu trữ trong thư mục này:
import sys sys.path.insert(0, "/path/to/your/package_or_module") 5Bản tóm tắt
- Khi bạn nhập một mô -đun, Python sẽ tìm kiếm tệp mô -đun từ các thư mục được chỉ định trong biến import module_1 9.
- Python cho phép bạn sửa đổi đường dẫn tìm kiếm mô -đun bằng cách thay đổi, thêm và loại bỏ các phần tử khỏi biến import module_1 9.
Bạn có thấy hướng dẫn này hữu ích không?