[IPython-dev] Changing functions in a running program?

Andreas Yankopolus andreas at yank.to
Sat Jan 12 18:07:20 EST 2019


Is it possible to run a program to a breakpoint in IPython and then change functions within that program? This would be for interactively experimenting with program logic without having to restart the program from scratch. I’m running IPython3 from Emacs using Elpy for interacting with the IPython3 process.

Consider foo.py as follows:

#!/usr/bin/env ipython3

import sys
from IPython.core.debugger import Pdb


def print_name():
    print ("Alice")

def name():
    print_name()

def main(argv):
    print ("In main.")
    Pdb().set_trace()
    name()

if __name__ == "__main__":
    main(sys.argv[1:])

Running it gives me:

ayank at snorri:~/Documents$ ./foo.py 
In main.
> /home/ayank/Documents/foo.py(16)main()
     14     print ("In main.")
     15     Pdb().set_trace()
---> 16     name()
     17 
     18 if __name__ == "__main__":


ipdb> 

I now want to change the definition of print_name() to print “Bob” instead of “Alice”. I can make this change in Emacs, send the new function to IPython with C-c C-y f, but when I then type name(), I get “Alice”. The reference to print_name() in name() is not getting updated to point to the new definition of print_name(). Likely I’m going about this process incorrectly, as I can make these kind of changes at an IPython3 prompt but not at an ipdb one.

Thanks,

Andreas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ipython-dev/attachments/20190112/ebf994bb/attachment.html>


More information about the IPython-dev mailing list