1

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

1 回答 1

1

错误消息告诉您使用该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/

于 2019-07-23T14:18:27.897 回答