列出命名空间包中的模块

List modules in namespace package

提问人:siebz0r 提问时间:4/5/2013 更新时间:4/5/2013 访问量:2502

问:

我正在尝试让 Python 列出命名空间包中的所有模块。

我有以下文件结构:

cwd
|--a
|  `--ns
|     |--__init__.py
|     `--amod.py
|--b
|  `--ns
|     |--__init__.py
|     `--bmod.py
`--c
   `--ns
      |--__init__.py
      `--cmod.py

每个都通过以下行将其包定义为命名空间包:__init__.py

__import__('pkg_resources').declare_namespace(__name__)

该模块包含一个类 ,包含另一个类,并包含该类。amodAbmodBcmodC

当拥有干净的环境时,会发生以下情况:

>>> import inspect, sys, glob
>>> sys.path += glob.glob('*')
>>> import ns
>>> inspect.getmembers(ns, inspect.ismodule)
[]

如您所见,未列出这些模块。

现在,当我手动导入模块,然后再次调用 inspect 时:

>>> inspect.getmembers(ns, inspect.ismodule)
[('amod', <module 'ns.amod' from 'a/ns/amod.pyc'>), ('bmod', <module 'ns.bmod' from 'b/ns/bmod.pyc'>), ('cmod', <module 'ns.cmod' from 'c/ns/cmod.pyc'>)]

现在我希望调用无需手动导入模块即可工作,那么我该如何实现呢?inspect

python 模块 命名空间 检查

评论

0赞 erikbstack 1/8/2014
我发现这个回答很有帮助:stackoverflow.com/a/8556471/131120
1赞 jacquev6 10/4/2017
答案似乎就在这里:packaging.python.org/guides/creating-and-discovering-plugins/......

答: 暂无答案