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

Wes Turner wes.turner at gmail.com
Sat Jan 12 20:37:52 EST 2019


https://en.wikipedia.org/wiki/Monkey_patch#Pitfalls

https://pypi.org/search/?q=monkeypatch

https://docs.pytest.org/en/latest/monkeypatch.html#monkeypatching-mocking-modules-and-environments

https://stackoverflow.com/questions/48112226/update-a-function-during-debugging-pdb-or-ipdb
- Does this work from just a plain ipdb shell (when not sending the new
function definition from emacs)?


On Sat, Jan 12, 2019 at 6:11 PM Andreas Yankopolus <andreas at yank.to> wrote:

> 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
> _______________________________________________
> IPython-dev mailing list
> IPython-dev at python.org
> https://mail.python.org/mailman/listinfo/ipython-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ipython-dev/attachments/20190112/9f18bd69/attachment-0001.html>


More information about the IPython-dev mailing list