Python setuptools:__ init__.py不调用declare_namespace()

时间:2014-06-22 00:28:31

标签: python setuptools zope zodb

我正在尝试安装zope2.zodbbrowser 0.2软件包(https://pypi.python.org/pypi/zope2.zodbbrowser/0.2)。安装脚本失败,并显示以下错误:

Namespace package problem: zope2 is a namespace package, but its
__init__.py does not call declare_namespace()! Please fix it.
(See the setuptools manual under "Namespace Packages" for details.)

手册中的相关部分似乎就在这里:https://pythonhosted.org/setuptools/setuptools.html#namespace-packages

但是,我不熟悉setuptools的内部结构,我无法在手册的帮助下解决问题。如何解决此命名空间问题以成功安装包?

供您参考,〜/ zodbbrowser / src / zope2.zodbbrowser / zope2 / __ init__.py的源代码是:

# this is a namespace package
try:
    import pkg_resources
    pkg_resources.declare_namespace(__name__)
except ImportError:
    import pkgutil
    __path__ = pkgutil.extend_path(__path__, __name__)

1 个答案:

答案 0 :(得分:0)

该错误消息告诉您使用declare_namespace()函数,因此似乎可以使其工作。

但是您可能应该使用隐式命名空间包,并完全删除__init__.py。命名空间包通常没有一个,因为它们可以与具有相同树状结构的另一个命名空间包中的__init__.py冲突。

例如,如果您拥有zope2.a命名空间:

zope2/__ init__.py
zope2/a/__init__.py

还有zope2.b命名空间:

zope2/__ init__.py
zope2/b/__init__.py

安装两个后的结果将是:

zope2/__ init__.py <= Setuptools cannot know which file to take
zope2/a/__init__.py
zope2/b/__init__.py

请参阅Python文档:

  

创建本地名称空间包所需要做的只是从名称空间包目录中省略 init .py。

https://packaging.python.org/guides/packaging-namespace-packages/