10

I'm trying to get Python to list all modules in a namespace package.

I have the following file structure:

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

Each __init__.py defines it's package as a namespace package by having the following line:

__import__('pkg_resources').declare_namespace(__name__)

The amod module contains a class A, bmod contains another class B and cmod contains the C class.

When having a clean environment the following happens:

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

As you can see, the modules are not listed.

Now when I import the modules manually and then call the inspect again:

>>> 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'>)]

Now I'd like the inspect call to work without importing the modules manually, so how can I achieve this?

siebz0r
  • 18,867
  • 14
  • 64
  • 107

0 Answers0