从Distributed 中的命名空间包中,我知道我可以利用命名空间包将一个大的 Python 包分成几个较小的包。真是太棒了。该文件还提到:
请注意,顺便说一句,您的项目的源代码树必须包含命名空间包的 __init__.py 文件(以及任何父包的 __init__.py),在正常的 Python 包布局中。这些
__init__
.py 文件必须包含以下行:__import__('pkg_resources').declare_namespace(__name__)
此代码确保命名空间包机制正在运行,并且当前包已注册为命名空间包。
我想知道将相同的目录层次结构与包的层次结构保持一致有什么好处吗?或者,这只是distribute/setuptools的命名空间包功能的技术要求?
前任,
我想提供一个子包foo.bar,这样我必须构建以下文件夹层次结构并准备一个 __init__.py 以使 setup.py 工作于命名空间包:
~foo.bar/
~foo.bar/setup.py
~foo.bar/foo/__init__.py <= one-lined file dedicated to namespace packages
~foo.bar/foo/bar/__init__.py
~foo.bar/foo/bar/foobar.py
我不熟悉命名空间包,但在我看来 1) foo/bar 和 2)(几乎)单行 __init__.py 是例行任务。他们确实提供了一些“这是一个命名空间包”的提示,但我认为我们已经在setup.py中获得了这些信息?
编辑:
如以下块所示,我可以在我的工作目录中拥有一个没有嵌套目录和单行 __init__.py 的命名空间包吗?也就是说,我们可以让setup.py只输入一行就自动生成这些namespace_packages = ['foo']
吗?
~foo.bar/
~foo.bar/setup.py
~foo.bar/src/__init__.py <= for bar package
~foo.bar/src/foobar.py