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

How do I handle namespace packages that will serve as dependencies for another package

提问人:tryingtosolve 提问时间:10/6/2018 更新时间:12/15/2021 访问量:552

问:

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

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

mainpackage依赖于 和 ,其中 as 和 可以独立使用。换言之,在 中,有对 和 的引用。简而言之,我希望用户能够在不调用 .我还希望用户使用并开始使用 ,其中将调用 s 中的函数。subpackage_asubpackage_bsubpackage_asubpackage_bmainpackagesubpackage_asubpackage_bfrom myProject import subpackage_asubpackage_a.subfunction(args)mainpackagefrom myProject import mainpackagemainpackage.mainfucntion(args)mainpackage.mainfucntionsubpackage

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

Python 命名空间 setuptools

评论

0赞 phd 10/8/2018
如果 和 是独立的,为什么要让它们成为子包而不是独立的库?subpackage_asubpackage_b

答:

0赞 korommatyi 12/15/2021 #1

无论如何,您都需要在相应的包中指定一个名称,并且在定义依赖项时只需使用这些名称即可。下面是一个稍微简化的示例,只有一个子包: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"],
)

评论

1赞 Will Udstrand 7/19/2022
有没有办法让它在安装软件包时自行安装所需的子包?当我尝试先安装主包时,我得到了一个。mainERROR: No matching distribution found for my-project-sub
0赞 korommatyi 5/26/2023
这会有帮助吗?stackoverflow.com/a/65902365/4350939