我建立了一个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
?换句话说,如果两个程序包以相同的名称空间开头,它们是否无法导入另一个程序包?
答案 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