Linux

PYTHONPATH 環境變數…之後如何創建每個子目錄?

  • October 16, 2013

我目前這樣做:

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

我怎樣才能使 PYTHONPATH 可以包含所有子目錄?

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

PYTHONPATH 不是這樣工作的。PYTHONPATH 對其搜尋路徑的處理與 shell PATH 不同。假設我這樣做:

$ mkdir /home/jsmith/python
$ cd /home/jsmith/python
$ touch a.py b.py

這將在 Python 中起作用(sys.path將包括目前目錄):

$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6

Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51)
>>> import a, b   # Works
>>> quit()

__init__.py但是,如果目錄中存在子目錄,則將其視為包,否則將被 PYTHONPATH忽略:

$ 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

要獲取該子目錄中的某些內容,這將起作用:

>>> from pkg import c   # Works
>>> import pkg.c        # Works

要推出添加 PYTHONPATH 中每個子目錄的解決方案,您需要顯式地將每個文件夾添加到 PYTHONPATH 或以sys.path程式方式。這種行為是有意的,其行為shell PATH 完全不同。鑑於解釋器在這方面對包的支持,肯定有更好的方法來完成你所追求的嗎?

引用自:https://serverfault.com/questions/80227