Câu trả lời:
Đó không phải là cách PYTHONPATH hoạt động; PYTHONPATH xử lý đường dẫn tìm kiếm của nó khác với vỏ PATH. Hãy nói tôi làm điều này:
$ mkdir /home/jsmith/python
$ cd /home/jsmith/python
$ touch a.py b.py
Điều này sẽ hoạt động, trong Python ( sys.path
sẽ bao gồm thư mục hiện tại):
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
>>> import a, b # Works
>>> quit()
Tuy nhiên, các thư mục con được coi là các gói khi __init__.py
có trong thư mục và bị PYTHONPATH bỏ qua theo cách khác:
$ mkdir /home/jsmith/python/pkg
$ cd /home/jsmith/python/pkg
$ touch __init__.py c.py d.py
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
>>> import a, b # Works
>>> import c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named c
Để có được một cái gì đó trong thư mục con đó, điều này sẽ hoạt động:
>>> from pkg import c # Works
>>> import pkg.c # Works
Để cuộn một giải pháp trong đó mọi thư mục con trong PYTHONPATH của bạn được thêm vào, bạn cần thêm rõ ràng mọi thư mục vào PYTHONPATH hoặc sys.path
lập trình. Hành vi này là có chủ ý, và hành xử không có gì giống như vỏ PATH. Với sự hỗ trợ của thông dịch viên cho các gói về vấn đề này, chắc chắn có cách nào tốt hơn để hoàn thành những gì bạn đang theo đuổi?
Dĩ nhiên, có thể thêm các thư mục con của một thư mục vào biến PYTHONPATH của bạn bằng cách sử dụng shell. Tôi hiện đang sử dụng một cái gì đó tương tự như sau trong .bashrc của tôi:
export PYTHONPATH="$(find $HOME/ -maxdepth 2 -type d | sed '/\/\./d' | tr '\n' ':' | sed 's/:$//')"
Điều này sẽ bao gồm tất cả các thư mục con của thư mục người dùng của bạn đến độ sâu 2 trong cây. Lệnh find định vị các thư mục ('-type d') và các lệnh sed và tr sau đây định dạng đầu ra theo cách thông thường của các biến PATH.
Rời khỏi '-maxdepth 2' sẽ bao gồm tất cả các thư mục con của thư mục nhà của bạn, có lẽ là khá nhiều để tìm kiếm. Có lẽ điều này chỉ nên được thực hiện trong thư mục $ HOME / repository / python-Stuff của bạn.