2012-12-25 75 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

相关问题