question on "import __main__"

Robert Kern rkern at
Fri Aug 26 17:00:41 CEST 2005

wen wrote:
> i have written some code in as below:
> import __main__
> if __name__!='__main__':
>    print 1
> print 2
> when i run, i got
> 2
> on the screen.
> now, i have some question about the code, 1. since no __main__ module at
> all, why it's legal to write "import __main__"?

Because a module object is created for the running script. It is placed
in sys.modules with the name "__main__". When you "import __main__", the
import mechanism looks in sys.modules first for a module with the name
"__main__" and uses that if it's there.

> 2. since if running a script independently, the __name__ should be
> '__main__', why it's not in the above code?

It is. However, you wrote "!=" instead of "==".

Robert Kern
rkern at

"In the fields of hell where the grass grows high
 Are the graves of dreams allowed to die."
  -- Richard Harter

More information about the Python-list mailing list