[Python-3000] PEP to change how the main module is delineated

Nick Coghlan ncoghlan at gmail.com
Mon Apr 23 11:31:39 CEST 2007

Brett Cannon wrote:
> This PEP is to change the ``if __name__ == "__main__": ...`` idiom to
> ``if __name__ == sys.main: ...``  so that you at least have a chance
> to execute module in a package that use relative imports.
> Ran this PEP past python-ideas.  Stopped the discussion there when too
> many new ideas were being proposed.  =)  I have listed all of them in
> the Rejected Ideas section, although if overwhelming support for one
> comes forward the PEP can shift to one of them.


I still prefer the "__module_name__" fallback that was actually briefly 
in the tree for 2.5 (the change was made really late in the 2.5 cycle, 
so it was backed out with the intention of revisiting the idea for 2.6 - 
check the svn log for lib/runpy.py).

The trick with that approach was that runpy.run_module() would *always* 
set "__module_name__" to the real name of the module being executed, 
regardless of what it was told to set "__name__" to.

Then the import machinery was modified such that if it came across an 
explicit relative import being made from a module called "__main__", it 
would check to see if "__module_name__" was set, and if so, use that 

The issue discussed in PEP 338 (and this new PEP) gets fixed, with zero 
impact on anything else (even normal import speed is unaffected, as the 
check for "__module_name__" would only occur on an error handling path 
that currently raises an exception).


Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia

More information about the Python-3000 mailing list