[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