2

I'm working from inside an ipython shell and often need to reload the script files that contain my functions-under-construction.

Inside my main.py I have:

def myreload(): execfile("main.py") execfile("otherfile.py")

Calling myreload() works fine if I have already ran in the same ipython session the execfile commands directly.

However, for some reason, if the session is fresh and I just called execfile("main.py"), then myreload() doesn't actually make the functions from inside otherfile.py available. It doesn't throw any error though.

Any ideas?

GJ.
  • 5,226
  • 13
  • 59
  • 82

2 Answers2

2

If you seek to learn the actual correct usage of ipython (i.e. in interactive mode), then you should use magic commands like:

%run

and

%edit

Check help for those functions with %run?. This provides explicit examples.

See also http://ipython.org/ipython-doc/stable/interactive/tutorial.html

Thomas K
  • 39,200
  • 7
  • 84
  • 86
Yauhen Yakimovich
  • 13,635
  • 8
  • 60
  • 67
2

Functions create a new scope. execfile() runs the script in the current scope. What you are doing will not work.

Ignacio Vazquez-Abrams
  • 776,304
  • 153
  • 1,341
  • 1,358