2013-10-11 2 views
20

Normalerweise muss ich ein Notebook neu starten (die meisten Teile davon), wenn ich es wieder öffne, um Zugriff auf zuvor definierte Variablen zu erhalten und weiter zu arbeiten.Wie (gelegentlich) bestimmte Zellen beim Ausführen von IPython-Notebook überspringen?

Manchmal möchte ich jedoch einige der Zellen überspringen, die keinen Einfluss auf nachfolgende Zellen haben (z. B. könnten sie einen Zweig der Analyse umfassen, der beendet ist) und sehr lange Zeit benötigen. Diese Zellen können im gesamten Notebook verstreut sein, so dass etwas wie "Run All Below" nicht viel hilft.

Gibt es einen Weg, dies zu erreichen?

Idealerweise können diese Zellen mit speziellen Flags versehen werden, so dass sie manuell "ausgeführt" werden können, aber bei "Alles ausführen" übersprungen werden.

EDIT

%%cache (ipycache Erweiterung), wie durch @Jakob löst das Problem zu einem gewissen Grad vorgeschlagen.

Eigentlich brauche ich nicht einmal irgendwelche Variablen (die groß sein können, aber für die folgenden Zellen unnötig sind) beim erneuten Ausführen, nur die gespeicherte Ausgabe zählt als Analyseergebnisse.

Als Workaround, setzen Sie %%cache folder/unique_identifier an den Anfang der Zelle. Der Code wird nur einmal ausgeführt, und bei der erneuten Ausführung werden keine Variablen geladen, es sei denn, Sie löschen die Datei unique_identifier.

Leider alle Ausgabeergebnisse gehen verloren, wenn mit %%cache geführten re ...

EDIT II (14. Oktober 2013)

Die Master-Version von ipython + ipycache Jetzt wird der Codezellen-Ausgang ebenfalls eingelegt (und erneut angezeigt).

Für reiche Display Ausgänge einschließlich Latex, HTML (Pandas Dataframe-Ausgang), erinnern IPython Display() -Methode verwendet werden, beispielsweise display(Latex(r'$\alpha_1$'))

+0

Wenn Sie die Ausgabe nicht erneut anzeigen müssen, können Sie definiere e deine eigene Skip-Magie wie ich hier gemacht habe: http://stackoverflow.com/a/43584169/4098821 – Robbe

Antwort

17

Derzeit gibt es keine solche Funktion in der IPython Notebook enthalten. Dennoch gibt es einige Möglichkeiten, um Ihr Leben leichter zu machen, wie:

  • verwenden, um die %store oder vielleicht besser die %%cache Magie (Erweiterung), die Ergebnisse dieser zeitweise Zellen zu speichern, so dass sie nicht haben (siehe https://github.com/rossant/ipycache)

  • fügen Sie ein if==0: vor den Zellen neu berechnet werden Sie nicht wollen,

  • konvertieren, diese Zellen zu rohen Zellen auszuführen (aber Sie werden die bereits gespeicherten Ausgangs verlieren!

    )

(siehe Diskussion bei https://github.com/ipython/ipython/issues/2125)

Jakob

+1

Gut zu wissen über ipycache Erweiterung, die ähnlich wie ich (manuell) jetzt funktioniert, aber nur besser! Die "%% Cache" -Magie dient effektiv als das spezielle Flag, wenn "Alles ausführen", und manuelles erneutes Ausführen erfordert einfach das Löschen von Cache-Dateien. Brillant! Danke, Jakob ~ – herrlich10

5

Obwohl dies nicht genau das ist, was Sie scheinen zu suchen, wenn Sie die Ausführung einer Zelle ganz wegzulassen (wo nicht zwischengespeichert werden Ergebnisse geladen), können Sie den folgenden Hack am Anfang einer Zelle hinzufügen (vorausgesetzt, Sie ein Unix-basiertes Betriebssystem verwenden):

%%script false 
+1

Wer weiß, wie man das unter Windows macht? – royco

+0

@royco Es funktioniert auch auf Windows –