Trong Python, danh sách các thư mục được tìm kiếm khi nhập các mô-đun và gói với import, đường dẫn tìm kiếm mô-đun, được lưu trữ trong sys.path
Bài viết này mô tả cách kiểm tra các đường dẫn tìm kiếm mô-đun hiện tại và thêm các đường dẫn mới
- Kiểm tra đường dẫn tìm kiếm mô-đun với sys.path
- Thêm đường dẫn tìm kiếm mô-đun mới với sys.path.append()
- Thêm đường dẫn tìm kiếm mô-đun mới với PYTHONPATH
- Thêm đường dẫn tìm kiếm mô-đun mới với tệp cấu hình đường dẫn (pwd # /Users/mbp/Documents/my-project/python-snippets/notebook python3 print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets/notebook', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 0)
Xem bài viết sau để biết cách sử dụng cơ bản của import
- Cách nhập mô-đun, gói, chức năng, v.v. trong Python
Liên kết được tài trợ
Kiểm tra đường dẫn tìm kiếm mô-đun với sys.path
Đường dẫn tìm kiếm mô-đun hiện tại được lưu trữ trong sys.path
sys.path là danh sách các chuỗi chỉ định đường dẫn tìm kiếm mô-đun. Bạn có thể kiểm tra các mục với pwd # /Users/mbp/Documents/my-project/python-snippets/notebook python3 print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets/notebook', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 5
Trong ví dụ này, pwd # /Users/mbp/Documents/my-project/python-snippets/notebook python3 print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets/notebook', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 6 được sử dụng để dễ đọc hơn
- In đẹp với pprint trong Python
import sys import pprint pprint.pprint(sys.path)
nguồn.
Khi thực hiện, kết quả như sau
pwd # /Users/mbp/Documents/my-project/python-snippets/notebook python3 print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets/notebook', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages']
nguồn.
Kết quả phụ thuộc vào môi trường. Trong môi trường ví dụ (Mac với Python3 được cài đặt bởi Homebrew), các thư mục sau được lưu trữ trong sys.path
- Thư mục chứa tập lệnh đã thực thi (pwd # /Users/mbp/Documents/my-project/python-snippets/notebook python3 print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets/notebook', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 8)
- Thư mục được đặt bởi biến môi trường PYTHONPATH (xem bên dưới để biết chi tiết)
- Thư mục làm việc hiện tại
- Ba thư mục cho thư viện tiêu chuẩn
- Thư mục cd .. pwd # /Users/mbp/Documents/my-project/python-snippets python3 notebook/print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 0 dành cho thư viện bên thứ ba được cài đặt với cd .. pwd # /Users/mbp/Documents/my-project/python-snippets python3 notebook/print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 1
Nếu bạn di chuyển thư mục hiện tại trong thiết bị đầu cuối và thực hiện lại nó, thì cd .. pwd # /Users/mbp/Documents/my-project/python-snippets python3 notebook/print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 2 sẽ chuyển sang đường dẫn khác
cd .. pwd # /Users/mbp/Documents/my-project/python-snippets python3 notebook/print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages']
nguồn.
Vì đường dẫn tìm kiếm mô-đun thay đổi tùy thuộc vào thư mục hiện tại, quá trình nhập có thể không hoạt động tùy thuộc vào nơi tệp tập lệnh được thực thi
Các mô-đun được tìm kiếm theo thứ tự sys.path. Do đó, các mô-đun trong thư mục chứa tệp tập lệnh đã thực thi (pwd # /Users/mbp/Documents/my-project/python-snippets/notebook python3 print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets/notebook', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 8) được tìm kiếm đầu tiên. Lưu ý rằng nếu có một tệp có cùng tên với thư viện chuẩn trong cùng thư mục với tệp tập lệnh được thực thi, tệp đó sẽ được nhập
Thêm đường dẫn tìm kiếm mô-đun mới với sys.path.append()
Vì sys.path chỉ là một danh sách nên bạn có thể thêm các đường dẫn mới. Trong ví dụ này, phương thức cd .. pwd # /Users/mbp/Documents/my-project/python-snippets python3 notebook/print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 7 được sử dụng, nhưng bạn cũng có thể sử dụng phương thức cd .. pwd # /Users/mbp/Documents/my-project/python-snippets python3 notebook/print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 8, v.v.
- Thêm một mục vào danh sách trong Python (chắp thêm, mở rộng, chèn)
Nếu bạn import sau khi thêm đường dẫn vào sys.path, bạn có thể nhập các mô-đun trong đường dẫn đã thêm
Ví dụ: nếu bạn muốn thêm một thư mục ở trên tệp script một cấp, bạn có thể viết như sau
- Nhận đường dẫn của tệp hiện tại (tập lệnh) bằng Python. import os import sys sys.path.append(os.path.join(os.path.dirname(__file__), '..')) 1
import os import sys sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
nguồn.
Thêm vào sys.path chỉ hoạt động trong mã đó. Nếu bạn muốn thêm đường dẫn vĩnh viễn, hãy sử dụng tệp PYTHONPATH hoặc pwd # /Users/mbp/Documents/my-project/python-snippets/notebook python3 print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets/notebook', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 0 được mô tả tiếp theo
Liên kết được tài trợ
Thêm đường dẫn tìm kiếm mô-đun mới với PYTHONPATH
Sử dụng biến môi trường PYTHONPATH để thêm vĩnh viễn đường dẫn tìm kiếm mô-đun
Đối với hệ điều hành giống Unix bao gồm cả Mac, hãy thêm phần sau vào import os import sys sys.path.append(os.path.join(os.path.dirname(__file__), '..')) 7, chẳng hạn. Để chỉ định nhiều đường dẫn, hãy phân tách chúng bằng dấu hai chấm import os import sys sys.path.append(os.path.join(os.path.dirname(__file__), '..')) 8
export PYTHONPATH="/path/to/add:$PYTHONPATH"
Trong Windows, bạn có thể thêm PYTHONPATH cũng như các biến môi trường thông thường bằng cách nhấp chuột phải vào PC (Máy tính của tôi) -> Hệ thống -> Thuộc tính hệ thống -> Biến môi trường. Trong Windows, phân tách nhiều đường dẫn bằng dấu chấm phẩy export PYTHONPATH="/path/to/add:$PYTHONPATH" 0
Thư mục export PYTHONPATH="/path/to/add:$PYTHONPATH" 1 trong ví dụ trên được thêm vào PYTHONPATH
Thêm đường dẫn tìm kiếm mô-đun mới với tệp cấu hình đường dẫn (pwd # /Users/mbp/Documents/my-project/python-snippets/notebook python3 print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets/notebook', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 0)
Nếu bạn đặt tệp cấu hình đường dẫn (pwd # /Users/mbp/Documents/my-project/python-snippets/notebook python3 print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets/notebook', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 0) trong thư mục cd .. pwd # /Users/mbp/Documents/my-project/python-snippets python3 notebook/print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 0, bạn có thể thêm đường dẫn tìm kiếm mô-đun
Tệp cấu hình đường dẫn (pwd # /Users/mbp/Documents/my-project/python-snippets/notebook python3 print_sys_path.py # ['/Users/mbp/Documents/my-project/python-snippets/notebook', # '/Users/mbp/Documents/lib', # '/Users/mbp/Documents/my-project/python-snippets/notebook', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', # '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', # '/usr/local/lib/python3.7/site-packages'] 0) phải chứa một đường dẫn trên mỗi dòng. Nó có thể là đường dẫn tương đối hoặc đường dẫn tuyệt đối. Có thể viết bình luận với export PYTHONPATH="/path/to/add:$PYTHONPATH" 7. Tên tệp có thể là bất kỳ thứ gì miễn là phần mở rộng là export PYTHONPATH="/path/to/add:$PYTHONPATH" 8