ipython代码完成不支持命名空间包

时间:2013-09-16 14:38:20

标签: namespaces package pip ipython setuptools

我已向PyPI,djangox-makodjangox-route提交了一些软件包。它们具有相同的命名空间包django。当我安装两个软件包时,它们运行良好。但是,在IPython中我无法使用完成。例如,

>>> import djangox.[tab]

在这种情况下,我希望显示djangox.routedjangox.mako,但没有结果。

所以我深入研究了ipython源代码,并在module_list中找到了函数IPython.core.completerlib.py

    for root, dirs, nondirs in os.walk(path):
        subdir = root[len(path)+1:]
        if subdir:
            files.extend(pjoin(subdir, f) for f in nondirs)
            dirs[:] = [] # Do not recurse into additional subdirectories.
        else:
            files.extend(nondirs)

由于djangox包是命名空间包,因此它没有 init .py,因此for循环不会为djangox的文件添加任何内容。

我认为这是ipython的一个bug,但在pydev中也是如此。这意味着大多数工具开发人员不关心命名空间包。所以我认为它也应该在setuptools命名空间包支持中修复。

然而,这需要时间,如果有解决方法会更好。如果这只是我的电脑问题,我有一些东西。

touch site-packages/djangox/__init__.py

然后ipython和pydev都工作。 easy_install也可以使用它,但它只使用相同的命名空间包支持最后安装的包。

python setup.py install

但我希望代码完成适用于我的包用户。是否有任何解决方法可以使下面的代码工作?

pip install djangox-mako djangox-route
ipython

>>> import djangox.[tab]
djangox.route    djangox.mako

0 个答案:

没有答案