[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