Môi trường PYTHONPATH biến đổi Làm thế nào để tôi thực hiện mọi thư mục con sau đó?


9

Tôi hiện đang làm điều này:

PYTHONPATH=/home/$USER:/home/$USER/respository:/home/$USER/repository/python-stuff

Làm thế nào tôi có thể làm cho nó để PYTHONPATH có thể bao gồm mọi thứ thư mục con?

PYTHONPATH = /home/$USER/....and-all-subdirectories

Câu trả lời:


14

Đó 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.pathsẽ 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__.pycó 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.pathlậ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?


3
Man, tôi muốn mỗi trang web sẽ kiểm tra các tài khoản khác của bạn trước khi từ chối bạn đăng đặc quyền. Nó bắt đầu lại từ đại diện, đặc biệt là với những thứ như giới hạn một URL ... (Tôi có nhiều tài liệu tham khảo hơn cho bạn, OP)
Jed Smith

1

Đó không phải là cách các biến PATH môi trường hoạt động - bạn cung cấp cho nó thư mục cấp cao nhất và tùy thuộc vào ứng dụng để lặp lại cây thư mục nếu cần.


Vì vậy, nếu tôi có tệp python trong /home/$USER/myfile.py Tôi có thể nhập tệp này không?
Alex

Chắc chắn, tại sao bạn không thể?
EEAA

1

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.