Reusing code from different IPython notebooks
Starting your notebook server with:
ipython notebook --script
will save the notebooks (.ipynb
) as Python scripts (.py
) as well, and you will be able to import them.
Or have a look at: http://nbviewer.ipython.org/5491090/ that contains 2 notebook, one executing the other.
There is also a "write and execute" extension, which will let you write the content of a cell to a file (and replace old content -> update code), which can then be imported in another notebook.
https://github.com/minrk/ipython_extensions#write-and-execute
In one notebook (two cells)
%reload_ext writeandexecute
--
%%writeandexecute -i some_unique_string functions.py
def do_something(txt):
print(txt)
And then in the other notebook:
from functions import do_something
do_something("hello world")
In IPython 2.0 you can simply %run 'my_shared_code.ipynb'
to share code between notebooks. See for example http://nbviewer.ipython.org/gist/edrex/9044756.
Ipythons %run
magic allows you execute python files and ipython scripts in a notebook. I sometimes use the -i
option so it runs in the notebooks namespace. Execute a cell with %run?
in it for more info.
You can use the ipython --script
to save notebooks also as .py
files on each save or uncomment the line c.NotebookManager.save_script=True
in your ipython_notebook_config.py
file for the same effect (use ipython profile create
for setting that up - on Ubuntu the config files live in ~/.config/ipython/
).
Edit: The following is true, but unnecessary - you can %run
a .ipynb
file directly. Thanks Eric.
If you use ipython magics in the notebook you want to import, I found that you can rename the .py
file to .ipy
(an ipython script), but I had to remove the first line (which contained the file encoding declaration) for it to work. There is probably a better way! This approach will likely confuse cell magics too (they'd all get applied at once).