【问题标题】:why one directory is the subdirectory of another in python system path?为什么一个目录是python系统路径中另一个目录的子目录?
【发布时间】:2012-12-25 13:09:07
【问题描述】:

我的 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

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

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

我之前可以导入的一些包在修改后会失败。所以这意味着“导入”不知道递归地找到合适的包?

谢谢!

【问题讨论】:

    标签: python recursion import path sys


    【解决方案1】:

    所以这意味着“导入”不知道递归地找到合适的包?

    没错。 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 的包/模块命名空间。

    【讨论】:

    • 感谢您的解释。我不太明白最后一部分。你能进一步解释一下吗? “如果没有直接在搜索路径上找到 util.py 或 util/__init__.py,递归处理将导致 ham.util 以错误的名称导入,从而破坏 Python 的包/模块命名空间。”
    猜你喜欢
    • 2011-11-06
    • 2012-01-26
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2012-02-09
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多