获取模块完全限定名称的最简单方法

Simplest way to get fully qualified name of a module

如何在模块级别获得 Python 中 模块 的完全限定名称?

例如,假设这是文件结构:

foo
├── setup.py
└── bar
    └── baz
        └── spam.py

如何从模块级别的 spam.py 文件中获取完全限定的模块名称 "bar.baz.spam"


__file__,可以和inspect.getmodulename(__file__)配对得到模块名"spam"。但是,我怎样才能把它变成 "bar.baz.spam"?

尝试这样的事情:

from bar.baz import spam

print(spam.__name__)

如果导入的名称不是模块,可以这样获取模块名称和对象名称:

from bar.baz.spam import MyClass

print(MyClass.__module__, MyClass.__name__)