具有相似子包的Python命名空间包

2024-04-20 07:47:35 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是一个场景:我有一个顶级包,其中一个子包中包含大量代码。这家伙看起来像这样:

packagename
  __init__.py
  clients
    http_client.py
    otherclient.py
    __init__.py
  otherpackage
  etc

我需要将clients转换成一个名称空间包,这样我就可以分发一个单独的repo,该repo为其他客户机提供额外的功能(它们具有不同的依赖关系,因此需要单独打包,以便我们的构建工作)

问题是我在扩展子包而不是顶层包。例如,依赖的新包如下所示:

packagename
  __init__.py
  clients
    __init__.py
    pipeline_client.py

魔法的组合pkgutil.extend_path似乎不起作用。我在各种__init__.py文件中尝试了以下行的所有可能组合。你知道吗

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

有没有办法确保子路径是扩展的路径?这是可能的吗(比如在依赖的命名空间包中命名)?我应该把我的子包重命名为从属包吗?你知道吗

编辑

我还应该注意,在父包中,__init__.py中有一些值,这些值是由子包导入的。这似乎是名称空间模块包的问题。你知道吗


Tags: pathpy路径名称clientinit场景空间