2012-12-25 139 views
1

我的sys.path是象下面這樣:爲什麼一個目錄是python系統路徑中另一個目錄的子目錄?

/homel/ychao/python/python_lib 
/usr/lib64/python27.zip 
/usr/lib64/python2.7 
/usr/lib64/python2.7/plat-linux2 
/usr/lib64/python2.7/lib-tk 
/usr/lib64/python2.7/lib-old 
/usr/lib64/python2.7/lib-dynload 
/usr/lib64/python2.7/site-packages 
/usr/lib64/python2.7/site-packages/PIL 
/usr/lib64/python2.7/site-packages/gst-0.10 
/usr/lib64/python2.7/site-packages/gtk-2.0 
/usr/lib64/python2.7/site-packages/wx-2.8-gtk2-unicode 
/usr/lib/python2.7/site-packages 
/usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info 
/usr/lib/python2.7/site-packages/IPython/extensions 

我注意到有一些一些目錄裏面全是子目錄/usr/lib64/python2.7,怎麼會是這樣?如果我刪除了所有的子目錄,並作出這樣的sys.path中:

/homel/ychao/python/python_lib 
/usr/lib64/python2.7 
/usr/lib/python2.7/site-packages 

一些軟件包,我可以導入之前將修改後失效。所以這意味着「導入」不知道遞歸地找到合適的包?

謝謝!

回答

3

所以這意味着「導入」不知道遞歸地找到合適的包?

沒錯。 docs for sys.path沒有提及任何地方的遞歸。

事實上,如果模塊分辨率是遞歸的,會產生令人困惑的行爲。假設/usr/lib/python2.7/site-packages/ham是搜索路徑上,和你有文件

/usr/lib/python2.7/site-packages/ham 
/usr/lib/python2.7/site-packages/ham/ham/util.py 

,你會做import util。如果直接在搜索路徑上找不到util.pyutil/__init__.py,則遞歸處理會導致ham.util以錯誤的名稱導入,從而導致Python的程序包/模塊名稱空間無效。

+0

感謝您的解釋。我不太瞭解最後一部分。你能進一步解釋嗎? 「如果直接在搜索路徑上找不到util.py或util/__ init__.py,則遞歸處理會導致ham.util以錯誤的名稱導入,從而導致Python的程序包/模塊名稱空間無效。」 – wiswit

相關問題