如何处理将用作另一个包的依赖项的命名空间包



我写了三个Python模块,其中两个是独立的,但最后一个取决于两个独立的模块。例如,考虑以下结构

myProject/
subpackage_a/
__init__.py
...
subpackage_b/
__init__.py
...
mainpackage/
__init__.py
...

mainpackage取决于subpackage_asubpackage_b,其中subpackage_asubpackage_b可以独立使用。换句话说,在mainpackage中,有对subpackage_asubpackage_b的引用。简而言之,我希望用户能够执行from myProject import subpackage_a并开始执行subpackage_a.subfunction(args)而无需调用mainpackage。我还希望用户使用from myProject import mainpackage并开始使用mainpackage.mainfucntion(args),其中mainpackage.mainfucntion将调用subpackages 中的函数。

我了解了命名空间打包。但是,我在涉及依赖项的命名空间包上找不到任何内容。如果有更好的解决方案,我不必使用命名空间打包。我可以得到一些关于我应该寻找什么的建议吗?

无论如何,您都需要在相应的setup.py中为包指定一个名称,并且在定义依赖项时只需使用这些名称即可。下面是一个稍微简化的示例,只有一个子包:

myProject
sub/
setup.py
myProject/
sub/
__init__.py
main/
setup.py
myProject/
main/
__init__.py

您设置的文件应如下所示:

myProject/sub/setup.py

from setuptools import setup, find_namespace_packages
setup(
name="my-project-sub",
...
packages=find_namespace_packages(include=["myProject.*"]),
)

myProject/main/setup.py

from setuptools import setup, find_namespace_packages
setup(
name="my-project-main",
...
packages=find_namespace_packages(include=["myProject.*"]),
install_requires=["my-project-sub"],
)

相关内容

最新更新