[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