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 to PyImport_ImportModuleLevelObject
. See the __import__()
documentation to get a feel for what the arguments mean. Within PyImport_ImportModuleLevelObject
relative names are resolved, so you can chase down the name
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 the name
key, but you can trace that name
value back to PyImport_ImportModuleLevelObject
. By creating a module object, it's __name__
value is set in the moduleobject.c
object constructor.