Как получить полное пространство имен модуля после его импорта в python

#python-3.x

#python-3.x

Вопрос:

 from foo.bar import bar

print(get_namespace(bar))
  

Я хочу, чтобы приведенный выше фрагмент кода печатал «foo.bar.bar»

Как это сделать в python3?

Комментарии:

1. Это bar функция или подмодуль?

Ответ №1:

Каждый импортированный модуль указан в sys.modules . Таким образом, вы можете выполнить итерацию sys.modules , чтобы найти путь, связанный с модулем:

 import sys
def get_module_name(mod):
    for path, module in sys.modules.items():
        if mod == module:
            return path
    raise ValueError('module not found')


from foo.bar import bar
print(get_module_name(bar))
# foo.bar.bar
  

Поскольку слово namespace зарезервировано для другой концепции, я переименовал функцию get_module_name .