4

我已经向 PyPI 提交了一些包,djangox-mako并且djangox-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)

因为djangoxpackage 是命名空间包,它没有init .py,所以 for 循环不会向文件中添加任何内容djangox

我认为这是 ipython 的错误,但在 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
4

0 回答 0