Вы не можете полагаться на самоанализ загруженных модулей, поскольку подпакеты могут быть не загружены. Вам придется взглянуть на файловую систему, предполагая, что рассматриваемый пакет верхнего уровня не является яйцом, файлом zip, модулем расширения или загружен из памяти.
def get_subpackages(module):
dir = os.path.dirname(module.__file__)
def is_package(d):
d = os.path.join(dir, d)
return os.path.isdir(d) and glob.glob(os.path.join(d, '__init__.py*'))
return filter(is_package, os.listdir(dir))