我看這個問題尋找答案,並沒有像任何人。
所以我寫了一個快速和骯髒的解決方案。只要把這個地方你的sys.path中,它會folder
下添加任何目錄(從當前工作目錄),或在abspath
:
#using.py
import sys, os.path
def all_from(folder='', abspath=None):
"""add all dirs under `folder` to sys.path if any .py files are found.
Use an abspath if you'd rather do it that way.
Uses the current working directory as the location of using.py.
Keep in mind that os.walk goes *all the way* down the directory tree.
With that, try not to use this on something too close to '/'
"""
add = set(sys.path)
if abspath is None:
cwd = os.path.abspath(os.path.curdir)
abspath = os.path.join(cwd, folder)
for root, dirs, files in os.walk(abspath):
for f in files:
if f[-3:] in '.py':
add.add(root)
break
for i in add: sys.path.append(i)
>>> import using, sys, pprint
>>> using.all_from('py') #if in ~, /home/user/py/
>>> pprint.pprint(sys.path)
[
#that was easy
]
而且我喜歡它,因爲我可以有一些文件夾隨機工具,而不是將它們作爲軟件包或任何其他軟件的一部分,仍然可以通過幾行代碼訪問其中的一些(或全部)工具。
因此,如果我想說15個子目錄,我將不得不分別添加每個子目錄? – themaestro 2010-06-29 19:46:37
並且你能給一個命令行參數的例子來改變PYTHONPATH嗎? – themaestro 2010-06-29 19:49:06
要在'.bashrc'中設置'PYTHONPATH':或者你的shell使用的任何啓動文件(如果它不是Bash),寫'export PYTHONPATH = $ PYTHONPATH:$ HOME/codez/project'。但是如果你有一堆子目錄,我會創建一個'.pth'文件並使用'site.addsitedir'。你可以創建一個模塊'sitecustomize'來爲你調用函數;嘗試把它放在'〜/ .local/lib/python2.6/sitecustomize.py'(替換你的Python版本),以便它能夠自動導入。 – 2010-06-29 19:54:56