2013-03-06 73 views
36

Everywhere tôi xem mã nhập khẩu Python module sử dụng import sys hoặc import mymoduleLàm thế nào để python tìm thấy một tệp mô-đun nếu câu lệnh nhập chỉ chứa tên tệp?

Làm thế nào để thông dịch viên tìm ra tập tin chính xác nếu không có thư mục hoặc đường dẫn được cung cấp?

+12

Loại 'giúp đỡ ("nhập khẩu") 'tại giao diện điều khiển và tận hưởng. – DSM

+1

http://effbot.org/zone/import-confusion.htm – Hoopdady

+0

[câu lệnh 'nhập'] (http://docs.python.org/2/reference/simple_stmts.html#the-import-statement) – jfs

Trả lời

39

http://docs.python.org/3/tutorial/modules.html#the-module-search-path

6.1.2. Đường dẫn tìm kiếm mô-đun

Khi mô-đun có tên spam được nhập, đầu tiên thông dịch sẽ tìm kiếm mô-đun tích hợp với tên đó. Nếu không tìm thấy, sau đó tìm kiếm một tệp có tên spam.py trong danh sách các thư mục được cung cấp bởi biến số sys.path. sys.path được khởi tạo từ các địa điểm này:

  • Các thư mục chứa các kịch bản đầu vào (hoặc thư mục hiện tại khi không có tập tin được chỉ định).
  • PYTHONPATH (danh sách tên thư mục, có cùng cú pháp với biến hệ vỏ PATH).
  • Cài đặt mặc định phụ thuộc.

Lưu ý: Trên hệ thống tệp có hỗ trợ liên kết tượng trưng, ​​thư mục chứa tập lệnh nhập được tính sau liên kết tượng trưng. Nói cách khác, thư mục chứa liên kết tượng trưng không được thêm vào đường dẫn tìm kiếm mô-đun.

Sau khi khởi tạo, chương trình Python có thể sửa đổi sys.path. Thư mục chứa tập lệnh đang chạy được đặt ở đầu đường dẫn tìm kiếm, phía trước đường dẫn thư viện chuẩn. Điều này có nghĩa là các tập lệnh trong thư mục đó sẽ được nạp thay vì các mô-đun cùng tên trong thư mục thư viện. Đây là lỗi trừ khi thay thế được dự định. Xem phần Mô-đun Chuẩn để biết thêm thông tin.

Để biết thông tin về "mặc định cài đặt cụ thể", xem tài liệu về the site module.

0

Python có biến đường dẫn giống như biến bạn có bên trong thiết bị đầu cuối của mình. Python tìm kiếm các mô-đun trong các thư mục bên trong đường dẫn đó hoặc trong thư mục chứa chương trình của bạn.

5

Sử dụng PYTHONPATH, đặt làm biến môi trường, tìm gói (thư mục chứa __init__.py tệp) và mô-đun (hoặc, nếu đã được tải một lần, truy lục đối tượng mô-đun từ sys.modules).

+0

Cảm ơn! Nhân tiện, liệu về nguyên tắc có được phép sử dụng các đường dẫn tuyệt đối hay tương đối không? Tôi sẽ chấp nhận trong 10 phút – Asciiom

+0

Bạn có thể sử dụng một trong hai, nhưng nói chung, tuyệt đối được ưu tiên cho sự rõ ràng của mã. –

17

Ngoài ra, bạn có thể xem những gì con đường hiện nay là bằng cách sử dụng các mô-đun sys

import sys 
print sys.path