Import a module without executing it?

Steven Bethard steven.bethard at gmail.com
Tue Dec 7 16:20:09 EST 2004


Jay O'Connor wrote:
> ----------------------
> def test(var):
>     print var
> 
> 
> #main
> test(3)
> ----------------------
> 
> I want to be able to import this module so I can see "ah ha, this module 
> defines a function called 'test'", but I don't want  the code at the 
> bottom executed during the import.

If you have source control over this file, you could write it with the 
more standard idiom:

def test(var):
     print var

if __name__ == "__main__":
     test(3)

Then when the module is imported, only the def statement gets executed, 
not the 'test(3)'.  Of course, if you don't have source control over the 
file, you can't do this...


Also note that code that is not protected by an
     if __name__ == "__main__":
test may be part of the module definition, so examining a module without 
executing this code may be misleading, e.g.:

def test(var):
     print var

globals()['test'] = type('C', (object,), dict(
     f=lambda self, var, test=test: test(var)))

if __name__ == "__main__":
     test().f(3)

The module above turns 'test' from a function into a class, so if all 
you do is look at the def statements, you may misinterpret the module.

Steve



More information about the Python-list mailing list