为什么一个目录是Python系统路径中另一个目录的子目录



我的sys.path如下:

/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

我注意到一些目录都是subdirectories/usr/lib64/python2.7,怎么会这样?当我删除所有子目录并制作这样的sys.path时:

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

修改后,我之前可以导入的一些软件包将失败。因此,这意味着"导入"不知道递归找到适当的软件包?

谢谢!

因此,这意味着"导入"不知道递归找到适当的软件包?

是的。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的软件包/模块名称空间。

最新更新