9

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モジュールを手動でインポートせずに呼び出しを機能させたいのですが、どうすればこれを達成できますか?

4

0 に答える 0