Python: определение, является ли импорт модулем или пакетом - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь написать что-то, что просканировало бы файл на предмет импорта, а затем перечислило все импорта, указав, какие пакеты являются модулями

Скажем, у меня есть следующая структура:

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

Может я что-то не так делаю?

...