从python导入模块使子模块消失

时间:2011-11-23 22:14:53

标签: python ipython

我安装了ipython(0.12.dev),我注意到由于名称冲突,我无法在具有path模块的项目中使用它。这是可以理解的,但问题是当我导入模块完整路径时,我关心的子模块不在那里。

例如,如果我在正常(没有path)目录中运行它:

>>> import IPython.external.path
>>> dir(IPython.external.path)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '_path', 'path']

但是如果我在一个有path模块(或只是mkdir path; touch path/__init__.py)的项目中运行它:

>>> import IPython.external.path
>>> dir(IPython.external.path)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']

缺少最后两个子模块(_pathpath)。

有没有办法访问这些模块?

1 个答案:

答案 0 :(得分:1)

path是第三方库,如果IPython存在,它将尝试使用它。不幸的是,这意味着它会在工作目录中尝试使用您的路径模块或包。

一个简单的解决方法是在另一个目录中启动IPython,在IPython中启动cd myproject(但后来你无法使用路径模块)。

要访问IPython附带的路径模块,请执行from IPython.external.path import _path。您可以修改IPython/external/path/__init__.py,直接转到附带的副本。