Как рекурсивно получить все подмодули в пакете Python?Python

Программы на Python
Anonymous
Как рекурсивно получить все подмодули в пакете Python?

Сообщение Anonymous »

Проблема

У меня такая структура папок:

Код: Выделить всё

- modules
- root
- abc
hello.py
__init__.py
- xyz
hi.py
__init__.py
blah.py
__init__.py
foo.py
bar.py
__init_.py
Вот то же самое в строковом формате:

Код: Выделить всё

"modules",
"modues/__init__.py",
"modules/foo.py",
"modules/bar.py",
"modules/root",
"modules/root/__init__.py",
"modules/root/blah,py",
"modules/root/abc",
"modules/root/abc/__init__.py",
"modules/root/abc/hello.py",
"modules/root/xyz",
"modules/root/xyz/__init__.py",
"modules/root/xyz/hi.py"
Я пытаюсь распечатать все модули в формате стиля импорта Python.
Пример вывода будет выглядеть следующим образом:

Код: Выделить всё

modules.foo
modules.bar
modules.root.blah
modules.root.abc.hello
modules.root.xyz.hi
Как это можно легко сделать на Python (если возможно, без сторонних библиотек)?

Что я пробовал

Пример кода

Код: Выделить всё

import pkgutil

import modules

absolute_modules = []

def find_modules(module_path):
for package in pkgutil.walk_packages(module_path):
print(package)
if package.ispkg:
find_modules([package.name])
else:
absolute_modules.append(package.name)

if __name__ == "__main__":
find_modules(modules.__path__)
for module in absolute_modules:
print(module)
Однако этот код выведет только «foo» и «bar». Но не «корневой» и его подпакеты. Мне также не удается понять, как преобразовать это, чтобы сохранить абсолютный стиль импорта. Текущий код получает только имя пакета/модуля, а не фактический абсолютный импорт.

Вернуться в «Python»