【问题标题】:Python namespace packages with Poetry带有诗歌的 Python 命名空间包
【发布时间】:2020-08-13 06:05:18
【问题描述】:

我正在使用 Poetry 构建一些命名空间包。每个包的目录结构都是一样的:

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

使用 Poetry 我可以构建一个轮子,安装它并使用包:

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。

我是否遗漏了包结构中的某些内容,或者有办法避免这种“命名空间冲突”?

非常感谢您的帮助!

【问题讨论】:

    标签: python python-poetry


    【解决方案1】:

    您需要从两个包中的aaa 文件夹中删除__init__.py。否则aaa 将被检测为普通包而不是命名空间包。详情请见https://www.python.org/dev/peps/pep-0420/#specification

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-04
      • 2018-12-06
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      相关资源
      最近更新 更多