Я пытаюсь написать что-то, что просканировало бы файл на предмет импорта, а затем перечислило все импорта, указав, какие пакеты являются модулями
Скажем, у меня есть следующая структура:
folder/
foo.py
bar.py
p1/
__init__.py
m1.py
p2/
__init__.py
m2.py
, где p1
и p2
- пакеты, а m1
, m2
- модули.
foo
и bar
имеют следующее содержание
#foo.py
import p1
и
#bar.py
import p1.m1
import p1.p2
Вывод, который я получаю, выглядит примерно так:
foo: p1 (package)
bar: p1.m1 (module), p1.p2 (package)
Если возможно, я также хотел бы знать, где находятся импортированные файлы и к какому пакету они относятся (например, m1
- это модуль в пакете p1
и m2
- это модуль в пределах p1.p2
)
Мне удалось отсканировать импорт с помощью модуля ast
, но мне действительно трудно получить какую-либо информацию об импорте.
Я попытался использовать pkgutil
, но он не работает с подпакетами. Вот что я попробовал
importer = pkgutil.get_importer(folder)
loader = importer.find_module('p1') # ok
loader = importer.find_module('p1.p2') # returns None
Может я что-то не так делаю?