I'm aware of the standard example: if you execute a module directly then it's __name__
global variable is defined as "__main__"
. However, nowhere in the documentation can I find a precise description of how __name__
is defined in the general case. The module documentation says...
Within a module, the module's name (as a string) is available as the value of the global variable
__name__
.
...but what does it mean by "the module's name"? Is it just the name of the module (the filename with .py
removed), or does it include the fully-qualified package name as well?
How is the value of the __name__
variable in a Python module determined? For bonus points, indicate precisely where in the Python source code this operation is performed.
It is set to the absolute name of the module as imported. If you imported it as
foo.bar
, then__name__
is set to'foo.bar'
.The name is determined in the
import.c
module, but because that module handles various different types of imports (including zip imports, bytecode-only imports and extension modules) there are several code paths to trace through.Normally,
import
statements are translated to a call to__import__
, which is by default implemented as a call toPyImport_ImportModuleLevelObject
. See the__import__()
documentation to get a feel for what the arguments mean. WithinPyImport_ImportModuleLevelObject
relative names are resolved, so you can chase down thename
variables there if you want to.The rest of the module handles the actual imports, with
PyImport_AddModuleObject
creating the actual namespace object and setting thename
key, but you can trace thatname
value back toPyImport_ImportModuleLevelObject
. By creating a module object, it's__name__
value is set in themoduleobject.c
object constructor.The
__name__
variable is an attribute of the module that would be accessible by the name.Example self created module that scetches the import mechanism:
Lines from types module: