我已经向 PyPI 提交了一些包,djangox-mako
并且djangox-route
. 他们有相同的命名空间包django
。当我安装了这两个软件包时,它们运行良好。但是,在 IPython 中我不能使用完成。例如,
>>> import djangox.[tab]
在这种情况下,我期待djangox.route
并djangox.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
package 是命名空间包,它没有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