2015-08-30 25 views
5

schrieb ich mein eigenes Modul, das als die folgende Struktur:Auto-Update-Modul in IPython/jupyter Notebook

mymodule/ 
├── __init__.py 
├── part1.py 
├── part2.py 
├── part3.py 
└── part4.py 

mein Modul Um zu testen, ich IPython und/oder jupyter Notebook (früher IPython Notebook) verwenden. Wie üblich habe ich das Modul Import wie

import mymodule 

Lassen Sie uns sagen, dass ich einige Code in part2.py bearbeiten und wollen die aktualisierte Version meines Modul verwenden. Zuerst dachte ich, nur das Modul durch import mymodule remimport würde den Job tun, aber es tut es nicht. Um das Modul vollständig neu zu laden, muss ich die IPython-Shell schließen oder den Kernel von jupyter neu starten und neu starten, indem ich mymodule importiere.

jedoch auf die docs reffering stellt IPython eine Auto-Update-Funktion namens autoreload, die verschiedene Modi bietet und aktiviert werden konnte wie folgt:

%load_ext autoreload 
%autoreload 1 
%aimport mymodule 

beide meiner Schnipsel verwenden, ich bin mymodule wie das Importieren :

%load_ext autoreload 
%autoreload 1 
%aimport mymodule 

import mymodule 

# let's do something with the module here 

aber auch bei aktivierter autoreload 1 oder autoreload 2 weder IPython noch jupyter tun, was ich erwarte, dass sie q zu tun, und ich habe immer noch Starten Sie die IPython-Shell oder starten Sie den Kernel von jupyter neu, um den bearbeiteten Code part2.py zu verwenden, der Teil von mymodule ist.

Was mache ich falsch? Es scheint, dass ich nicht verstanden habe, wie das funktionieren soll.

+3

klingt wie ein Fehler, ich benutze '% autoreload 2' (eigentlich füge ich es zu' ipython_config.py') und es funktioniert für die meisten Fälle. Nur Mehrfachvererbung ist mühsam. – dashesy

Antwort

4

Ändern %autoreload 1 zu %autoreload 2 wie dashesy sagte, alte Version oder Bug.