[Python-ideas] Module aliases and/or "real names"

Terry Reedy tjreedy at udel.edu
Wed Jan 5 11:07:58 CET 2011

On 1/4/2011 5:52 PM, Guido van Rossum wrote:

Nick's concern does not affect me,

> On the third hand, maybe you've finally hit upon a reason why the "if
> __name__ == '__main__': main()" idiom is bad...

but I use this all the time. A suggested alternative and possible 
eventual replacement: give *every* module an attribute __main__ set to 
either True or False. Then the idiom would be much simpler and easier to 
learn and write: 'if __main__: ...'.

If there were no other use of the fake '__main__' name, the simple and 
unconditional replacement would be much less disruptive than, say, the 
int division change. But the first 10 pages of codesearch on '__main__' 
shows things like

django/test/_doctest.py - 107 identical
           elif module.__name__ == '__main__':

   1850:         m = sys.modules.get('__main__')

another sys.modules.get(), a sys.modules(), and

Formulator/tests/framework.py - many identical

57:   if p0 and __name__ == '__main__':    58:       os.chdir(p0)

The variant conditionals are easy to patch (by hand). The sys.modules 
lookup suggests that the main module should continue to be keyed under 
'__main__', even if also keyed under its 'real' name.

[Keying modules under a canonical name would eliminate duplicate import 
bugs, but that is another issue.]

Terry Jan Reedy

More information about the Python-ideas mailing list