0

我想创建一个可以通过插件扩展的程序。我有一个结构,在安装所有包后似乎可以工作,但我不确定我所做的是否真的受支持:核心功能将由“普通”包提供,插件通过命名空间提供包。这是一个显示结构的最小示例:

项目结构

  • 00_core_package 为核心逻辑而不是命名空间包。
  • 01_foo_plugin 和 02_bar_plugin 作为两个示例包,它们是名称空间包,名称空间根 ( myprog) 与核心包相同。

当我在本地通过pip install .这三个包时,一切似乎都工作正常,但我不确定这是否真的是命名空间包的受支持用例。我的担忧是:

  • Python Packaging User Guide和引用的示例项目仅描述了两个子包都是真正的命名空间包的用例,即“根”命名空间本身不是独立的包。它还指出:

使用命名空间包的每个发行版都忽略__init__.py或使用 pkgutil-style是非常重要的__init__.py。如果任何发行版没有,它将导致命名空间逻辑失败,并且其他子包将无法导入。

  • 正如您在屏幕截图中看到的,PyCharm 无法正确索引项目,并且无法解析插件的导入。我可以通过以下任一方式解决此问题:
    • 将 00_core_package 取消标记为源根目录 - 这是不切实际的,因为我想将所有相关代码保留在同一个项目中。
    • 使核心包本身成为名称空间包,并将所有内容放在下面myprog.core

PyCharm 中的导入错误是我在这里做错了什么的第一个迹象,还是这更像是 PyCharm 本身的错误?

4

0 回答 0