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__)
amod
モジュールにはクラスA
が含まれ、bmod
別のクラスがB
含まcmod
れ、クラスが含まれますC
。
クリーンな環境があると、次のことが起こります。
>>> import inspect, sys, glob
>>> sys.path += glob.glob('*')
>>> import ns
>>> inspect.getmembers(ns, inspect.ismodule)
[]
ご覧のとおり、モジュールはリストされていません。
モジュールを手動でインポートしてから、再度検査を呼び出すと、次のようになります。
>>> 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
モジュールを手動でインポートせずに呼び出しを機能させたいのですが、どうすればこれを達成できますか?