2011-06-20 49 views
26

Tôi tiếp tục thấy các trang web đề cập đến thư mục mà bạn thực thi 'python' được thêm vào đường dẫn python. Ví dụ trên http://www.stereoplex.com/blog/understanding-imports-and-pythonpath, cd của tác giả vào thư mục/tmp rồi thực hiện 'print (sys.path)' và lo và behold, thư mục/tmp xuất hiện trong danh sách đường dẫn. Dưới đây là tôi cố gắng này ra trên hệ thống của tôi (với 2.6.6 cài đặt):Tại sao python của tôi không thêm thư mục làm việc hiện tại vào đường dẫn?

dụ cấu trúc:

app/ 
    mymodule.py 
    inner_folder/ 
    myscript.py 

trong myscript.py chứa dòng:

import 'mymodule.py' 

những gì tôi đã làm:

cd app 
python inner_folder/myscript.py # ImportError 

Vì tôi đang thực hiện trình thông dịch từ ứng dụng/thư mục, không nên 'ứng dụng' được đưa vào phần trán trên con đường? Đây là cách mà rất nhiều tài liệu tôi đã đọc đã xác định hành vi nên.

Hãy khai sáng!

(Tôi đã tạm thời giải quyết vấn đề này bằng cách thêm thư mục tôi muốn vào môi trường theo cách thủ công nhưng không muốn dựa vào đó mãi mãi. Vì nhiều trang web nói điều này có thể được thực hiện, tôi muốn tự mình tạo lại)

+7

không có nghĩa là: 'nhập mymodule' thay vì' nhập 'mymodule.py' '. – mouad

Trả lời

49

Đây là thư mục của được thêm vào, không phải thư mục hiện tại. Nếu bạn bật inner_folder/ thành một gói thì bạn có thể sử dụng python -m inner_folder.myscript để chạy tập lệnh trong khi có app/ được thêm vào sys.path.

+0

+1: thực sự, ngay cả với việc nhập cố định, đây là giải pháp thực sự. –

+2

Cảm ơn bạn đã làm rõ. Tôi biết thư mục của tập lệnh đã được thêm vào nhưng lý do duy nhất tôi tin rằng "thư mục hiện tại" cũng được thêm vào bởi vì nó được sử dụng để làm việc. Tôi thề! Một cái gì đó phải đã xảy ra để làm cho nó ngừng hoạt động. Tôi không nhớ việc sửa đổi PYTHONPATH theo bất kỳ cách nào vì vậy đây là lý do tại sao tôi hỏi câu hỏi này. – trinth

+1

Khi chạy Python 2.7 trong mac OS 10.7.5, thư mục hiện tại được thêm vào cho tôi và mã ví dụ ban đầu hoạt động. –

5

hay không thư mục hiện hành là ở sys.path, báo cáo nhập khẩu thường trông giống như:

import mymodule 

mã này bạn viết hình như:

import 'mymodule.py' 
Các vấn đề liên quan