这是一个场景:我有一个顶层包,其中包含一个子包中的大量代码。这家伙看起来像这样:
packagename
__init__.py
clients
http_client.py
otherclient.py
__init__.py
otherpackage
etc
我需要将clients
转换为命名空间包,以便我可以为其他客户端分发一个具有附加功能的独立存储库(它们具有不同的依赖关系,因此需要单独打包以使我们的构建工作)
问题是我正在扩展子包而不是顶级包。例如,依赖的新包看起来像这样:
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
内部有一些值,这些值是由子包导入的。这似乎是名称空间模块包的问题。