ModuleNotFoundError:没有名为cli.plugins.foo的模块-如何构建插件系统?

时间:2019-07-08 13:07:16

标签: python-3.x

我建立了一个Python(3.6)CLI,该CLI应该允许插件由命名空间cli.plugins加载。插件应该是单独的可测试存储库,可以导入cli.utils之类的模块以实现常见功能。

如果CLI具有文件夹结构:

 - cli
  - __init__.py
  - utils
   - plugins.py
   - __init__.py

该插件具有文件夹结构:

 - cli
  - plugins
   - foo
    - bar.py
    - __init__.py
 - tests
  - test_bar.py

当Python从CLI软件包中加载test_bar.py时,如何在插件中的测试bar.py中找到cli?换句话说,如果两个程序包以相同的名称空间开头,它们是否无法导入另一个程序包?

1 个答案:

答案 0 :(得分:0)

重新阅读以下内容:Creating a namespace package ...

  

极为重要的一点是,每个使用名称空间包的发行版都将忽略 init .py或使用pkgutil样式的 init .py。如果不进行任何分发,则将导致名称空间逻辑失败,并且其他子包将不可导入。

我从CLI的根目录中删除了__init__.py。之后,CLI中的所有模块都可以导入到插件中,并且CLI能够运行插件。

- cli
  - utils
   - plugins.py
   - __init__.py
 - cli
  - plugins
   - foo
    - bar.py
    - __init__.py
  - tests
   - __init__.py
   - test_bar.py