带有诗歌的Python名称空间软件包

时间:2020-08-13 06:05:18

标签: python python-poetry

我正在使用Poetry构建一些名称空间包。每个软件包的目录结构都相同:

package_bbb
    pyproject.toml
    aaa
        bbb
            myservice.py
            __init__.py
        __init__.py

使用诗歌,我可以制造一个轮子,安装并使用包装:

from aaa.bbb import myservice

当我开始构建第二个程序包时,我的问题就发生了,它需要第一个程序包作为依赖项。

结构保持不变:

package_ccc
    pyproject.toml
    aaa
        ccc
            mydata.py
            __init__.py
        __init__.py

在诗歌中,我将第一个添加为依赖项:

poetry add package_bbb

该软件包将安装(来自内部存储库)在生成的virtualenv中,并添加到pyproject.toml中。

第二包的车轮也很完美。第一个软件包将通过pip作为依赖项安装。

问题出在开发过程中:例如,如果我尝试在 mydata.py 内部,从第一个程序包中导入某些内容:

from aaa.bbb import myservice

我找不到模块。我认为这是因为我有2个aaa命名空间:一个在virtualenv中,一个在项目根目录中。第二个优先,并且没有aaa.bbb。

我是否在包的结构中缺少某些内容,或者有一种方法可以避免这种“命名空间冲突”?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要从两个软件包的__init__.py文件夹中删除aaa。否则,aaa将被检测为普通软件包,而不是名称空间软件包。有关更多详细信息,请参见https://www.python.org/dev/peps/pep-0420/#specification