我已向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
包是命名空间包,因此它没有 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