我正在尝试安装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__)
答案 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/