I'm aware of the standard example: if you execute a module directly then it's
Within a module, the module's name (as a string) is available as the value of the global variable.
It is set to the absolute name of the module as imported. If you imported it as
__name__ is set to
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.
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.