pythonpython-importfully-qualified-naming

Simplest way to get fully qualified name of a module


How can one get the fully qualified name of a module in Python, at the module level?

For example, let's say this is the file structure:

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

From within the spam.py file at the module level, how can I get the fully qualified module name "bar.baz.spam"?


There is __file__, which one can pair with inspect.getmodulename(__file__) to get the module name "spam". However, how can I turn this into "bar.baz.spam"?


Solution

  • Try something like this:

    from bar.baz import spam
    
    print(spam.__name__)
    

    If the name being imported is not a module, you can get the module name and object name like this:

    from bar.baz.spam import MyClass
    
    print(MyClass.__module__, MyClass.__name__)