Việc khởi tạo đường dẫn tìm kiếm mô-đun sys.path

Đường dẫn tìm kiếm mô-đun được khởi tạo khi Python khởi động. Đường dẫn tìm kiếm mô-đun này có thể được truy cập tại sys.path.

Mục đầu tiên trong đường dẫn tìm kiếm mô-đun là thư mục chứa tập lệnh đầu vào, nếu có. Mặt khác, mục nhập đầu tiên là thư mục hiện tại, trường hợp này xảy ra khi thực thi shell tương tác, lệnh -c hoặc mô-đun -m.

Biến môi trường PYTHONPATH thường được sử dụng để thêm thư mục vào đường dẫn tìm kiếm. Nếu tìm thấy biến môi trường này thì nội dung sẽ được thêm vào đường dẫn tìm kiếm mô-đun.

Ghi chú

PYTHONPATH sẽ ảnh hưởng đến tất cả các phiên bản/môi trường Python đã cài đặt. Hãy cảnh giác khi thiết lập điều này trong hồ sơ shell hoặc các biến môi trường toàn cầu của bạn. Mô-đun site cung cấp nhiều kỹ thuật đa sắc thái hơn như được đề cập bên dưới.

Các mục tiếp theo được thêm vào là các thư mục chứa các mô-đun Python tiêu chuẩn cũng như bất kỳ extension modules nào mà các mô-đun này phụ thuộc vào. Mô-đun mở rộng là các tệp .pyd trên Windows và các tệp .so trên các nền tảng khác. Thư mục chứa các mô-đun Python độc lập với nền tảng được gọi là prefix. Thư mục chứa các mô-đun mở rộng được gọi là exec_prefix.

Biến môi trường PYTHONHOME có thể được sử dụng để đặt vị trí prefixexec_prefix. Mặt khác, những thư mục này được tìm thấy bằng cách sử dụng tệp thực thi Python làm điểm bắt đầu, sau đó tìm kiếm các tệp và thư mục 'mốc' khác nhau. Lưu ý rằng mọi liên kết tượng trưng đều được theo sau để vị trí thực thi Python thực sự được sử dụng làm điểm bắt đầu tìm kiếm. Vị trí thực thi của Python được gọi là home.

Sau khi xác định được home, thư mục prefix sẽ được tìm thấy bằng cách tìm kiếm pythonmajorversionminorversion.zip (python311.zip) trước tiên. Trên Windows, kho lưu trữ zip được tìm kiếm trong home và trên Unix, kho lưu trữ dự kiến ​​sẽ ở lib. Lưu ý rằng vị trí lưu trữ zip dự kiến ​​sẽ được thêm vào đường dẫn tìm kiếm mô-đun ngay cả khi kho lưu trữ không tồn tại. Nếu không tìm thấy kho lưu trữ nào, Python trên Windows sẽ tiếp tục tìm kiếm prefix bằng cách tìm kiếm Lib\os.py. Python trên Unix sẽ tìm kiếm lib/pythonmajorversion.minorversion/os.py (lib/python3.11/os.py). Trên Windows prefixexec_prefix giống nhau, tuy nhiên trên các nền tảng khác lib/pythonmajorversion.minorversion/lib-dynload (lib/python3.11/lib-dynload) được tìm kiếm và sử dụng làm điểm neo cho exec_prefix. Trên một số nền tảng, lib có thể là lib64 hoặc giá trị khác, xem sys.platlibdirPYTHONPLATLIBDIR.

Sau khi được tìm thấy, prefixexec_prefix sẽ có sẵn tại sys.base_prefixsys.base_exec_prefix tương ứng.

Nếu PYTHONHOME không được đặt và tệp pyvenv.cfg được tìm thấy cùng với tệp thực thi chính hoặc trong thư mục mẹ của nó, sys.prefixsys.exec_prefix sẽ được đặt thành thư mục chứa pyvenv.cfg, nếu không, chúng sẽ được đặt thành cùng giá trị tương ứng với sys.base_prefixsys.base_exec_prefix. Điều này được sử dụng bởi Môi trường ảo.

Cuối cùng, mô-đun site được xử lý và các thư mục site-packages được thêm vào đường dẫn tìm kiếm mô-đun. Một cách phổ biến để tùy chỉnh đường dẫn tìm kiếm là tạo các mô-đun sitecustomize hoặc usercustomize như được mô tả trong tài liệu mô-đun site.

Ghi chú

Một số tùy chọn dòng lệnh nhất định có thể ảnh hưởng hơn nữa đến việc tính toán đường dẫn. Xem -E, -I, -s-S để biết thêm chi tiết.

Thay đổi trong phiên bản 3.14: sys.prefixsys.exec_prefix hiện được đặt vào thư mục pyvenv.cfg trong quá trình khởi tạo đường dẫn. Điều này trước đây đã được thực hiện bởi site, do đó bị ảnh hưởng bởi -S.

Môi trường ảo

Môi trường ảo đặt tệp pyvenv.cfg trong tiền tố của chúng, điều này khiến sys.prefixsys.exec_prefix trỏ đến chúng thay vì cài đặt cơ sở.

Các giá trị prefixexec_prefix của cài đặt cơ bản có sẵn tại sys.base_prefixsys.base_exec_prefix.

Ngoài việc được sử dụng làm điểm đánh dấu để xác định môi trường ảo, pyvenv.cfg cũng có thể được sử dụng để định cấu hình khởi tạo site. Hãy tham khảo virtual environments documentation của site.

Ghi chú

PYTHONHOME ghi đè phát hiện pyvenv.cfg.

Ghi chú

Có nhiều cách khác để triển khai "môi trường ảo", tài liệu này đề cập đến các cách triển khai dựa trên cơ chế pyvenv.cfg, chẳng hạn như venv. Hầu hết việc triển khai môi trường ảo đều tuân theo mô hình do venv đặt ra, nhưng có thể có những cách triển khai kỳ lạ khác với mô hình đó.

tập tin _pth

Để ghi đè hoàn toàn sys.path, hãy tạo một tệp ._pth có cùng tên với thư viện dùng chung hoặc tệp thực thi (python._pth hoặc python311._pth). Đường dẫn thư viện dùng chung luôn được biết đến trên Windows, tuy nhiên nó có thể không có trên các nền tảng khác. Trong tệp ._pth chỉ định một dòng cho mỗi đường dẫn để thêm vào sys.path. Tệp dựa trên tên thư viện dùng chung sẽ ghi đè tệp dựa trên tệp thực thi, cho phép hạn chế đường dẫn đối với bất kỳ chương trình nào đang tải thời gian chạy nếu muốn.

Khi tệp tồn tại, tất cả các biến đăng ký và môi trường đều bị bỏ qua, chế độ cách ly được bật và site không được nhập trừ khi một dòng trong tệp chỉ định import site. Các đường dẫn và dòng trống bắt đầu bằng # sẽ bị bỏ qua. Mỗi đường dẫn có thể là tuyệt đối hoặc tương đối với vị trí của tệp. Không được phép nhập các câu lệnh khác ngoài site và không thể chỉ định mã tùy ý.

Lưu ý rằng các tệp .pth (không có dấu gạch dưới ở đầu) sẽ được mô-đun site xử lý bình thường khi import site được chỉ định.

Python nhúng

Nếu Python được nhúng trong một ứng dụng khác Py_InitializeFromConfig() và cấu trúc PyConfig có thể được sử dụng để khởi tạo Python. Chi tiết cụ thể về đường dẫn được mô tả tại Cấu hình đường dẫn Python.

Xem thêm