[Tutor] import and reload in modules

Kent Johnson kent37 at tds.net
Mon Nov 5 03:12:06 CET 2007


I don't know what the problem is but here are some things that might help:
- don't catch the exception, let it print out. Send the traceback to the 
list.
- note you never reload siberia900 - in the load function the reload 
fails for an unknown reason and at the interpreter prompt you reload 
mytest, not siberia900.
- you don't have to use exec - import is available as __import__() and 
reload is already a function.

Kent

Garry Willgoose wrote:
> I'm writing a simple modelling environment that provides a GUI for  
> dynamically coupling fortran and C subroutines to solve a science  
> problem. The GUI and environment glue are all python. One thing I  
> want to do is allow the user to load a python file that provides the  
> user defined details on how the C/Fortran modules are to be coupled  
> in the science model ... basically a script file if you like. They  
> use the GUI to select and run the python file. I have no control over  
> whether/when the user edits the python script and wants to rerun the  
> script without restarting the environment so I need to be able to  
> (repeatedly) reload the current script at any time
> 
> I'm having problems with import and reload. Here is a simple test  
> code (mytest.py) that runs from the python prompt that shows the  
> problem, and the log of my session from the python command line.
> 
> In the real code the variable 'model' is passed into load() ... I've  
> just set it here to make the code self contained. At the first load()  
> the version in siberia900.py is set to 1.00. Between the first and  
> second load() I edit siberia900.py so that version is 0.00 (just an  
> easy way to see if the modified code is reloaded). Clearly the reload  
> fails (and if I don't have the try/except ... that is the commented  
> line is executed ... it crashes with the error 'NameError: name  
> 'siberia900' is not defined'). Also clearly reloading mytest also  
> doesn't change anything.
> 
> Now all this runs fine (i.e. the correct version numbers are output)  
> at the python interpretter line so its clearly something to do with  
> it being inside the module mytest which I don't understand. Finally  
> if I uncomment the bottom two lines and run it at the unix command  
> line as 'python mytest.py' it still fails in the same way (i.e. the  
> 'except' line is executed).
> 
> Can anyone please explain what's going on ... and how I might be able  
> to do what I need to do.
> 
> ------------------------------------
> current_model_name=''
> 
> def load():
>    global current_model_name
>    model='siberia900'
>    text1='import '+model
>    text2='reload('+model+')'
>    if model==current_model_name:
>      try:
>        exec(text2)
>        print 'here 2',text2
>      except:
>        print 'here 3',text1
>        exec(text1)
> #    exec(text2)
>    else:
>      print 'here 10', text1
>      exec(text1)
>    current_model_name=model
>    return(siberia900.version)
> 
> #load()
> #load()
> ----------------------------------------
> -----------------------------------------
>  >>> import mytest
>  >>> mytest.load()
> here 10 import siberia900
> '1.00'
>  >>> mytest.load()
> here 3 import siberia900
> '1.00'
>  >>> reload(mytest)
> <module 'mytest' from 'mytest.pyc'>
>  >>> mytest.load()
> here 10 import siberia900
> '1.00'
> -----------------------------------------
> 
> ====================================================================
> Prof Garry Willgoose,
> Australian Professorial Fellow in Environmental Engineering,
> Director, Centre for Climate Impact Management (C2IM),
> School of Engineering, The University of Newcastle,
> Callaghan, 2308
> Australia.
> 
> Centre webpage: www.c3im.org.au
> 
> Phone: (International) +61 2 4921 6050 (Tues-Fri AM); +61 2 6545 9574  
> (Fri PM-Mon)
> FAX: (International) +61 2 4921 6991 (Uni); +61 2 6545 9574 (personal  
> and Telluric)
> Env. Engg. Secretary: (International) +61 2 4921 6042
> 
> email:  garry.willgoose at newcastle.edu.au;  
> g.willgoose at telluricresearch.com
> email-for-life: garry.willgoose at alum.mit.edu
> personal webpage: www.telluricresearch.com/garry
> ====================================================================
> "Do not go where the path may lead, go instead where there is no path  
> and leave a trail"
>                            Ralph Waldo Emerson
> ====================================================================
> 
> 
> 
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 



More information about the Tutor mailing list