2014-02-26 5 views
7

Ich habe ein Ipython-Notebook mit einer Mischung aus SVG und PNG-Grafiken. Ich kann es ohne Probleme in HTML exportieren, aber es eingebettet die Bilder als kodierten Text in den Körper der Datei .html.Konvertieren von ipython Notebook in HTML mit separaten Bildern

Ich rufe:

ipython nbconvert --to html mynotebook.ipynb 

Die Ausgabe in der Befehlszeile enthält:

[NbConvertApp] Converting notebook mynotebook.ipynb to html 
[NbConvertApp] Support files will be in mynotebook_files/ 

aber kein solches Verzeichnis erstellt, und es gibt keine Dateien darin.

Es gibt verwandten Beiträge (1 , 2 , 3 , 4 ), aber sie entweder nicht dieses spezielle Problem beheben, oder zu den alten Tagen beziehen, wenn NBconvert eine separate Bibliothek war.

This document erklärt, wie man dieses Problem auf dem alten Weg löst, Dinge auch zu tun.

Ich habe zu verwenden versucht:

ipython nbconvert --config mycfg.py 

Mit

c = get_config() 
c.NbConvertApp.notebooks = ["mynotebook.ipynb"] 

in der .py Datei, aber das ist wie fas wie ich habe.

Was ich suche ist eine Möglichkeit, die PNG-Dateien, und vorzugsweise die Svg-Dateien, in einen Ordner zu gehen. Im Idealfall so einfach wie möglich!

+0

Es gibt einen [extractoutput] (https://github.com/ipython/ipython/blob/master/IPython/nbconvert/preprocessors/extractoutput.py) Präprozessor, der die Bilder in separaten Dateien speichert, aber Sie brauchen Ändern Sie die [HTML-Ausgabevorlagen] (https://github.com/ipython/ipython/tree/master/IPython/nbconvert/templates/html), um Informationen zu den extrahierten Bildern zu erhalten. –

+1

[PR 5245] (https://github.com/ipython/ipython/pull/5245) hat die Vorlage dafür korrigiert, daher sollte die Aktivierung von ExtractOutputPreprocessor jetzt der einzige notwendige Schritt sein. –

Antwort

4

Dank Thomas K 's Nudge Ich hatte einige Erfolge bei der Umsetzung dieser Arbeit. Betrachten Sie dies als eine Proto-Antwort, bis ich eine Chance habe, alle Nuancen des Problems zu verstehen. Es wird wahrscheinlich Fehler geben, aber das ist mein Verständnis von dem, was passiert.

Um das Standardverhalten der Sie ipython nbconvert --to html mynotebook.ipynb Befehl Standardeinstellung überschreiben, müssen Sie eine Konfigurationsdatei angeben und wie diese ipython nbconvert --config mycfg.py nennen. Dabei ist mycfg.py eine Datei im selben Verzeichnis wie Ihre Notizbücher. Mine sieht wie folgt aus:

c = get_config() 
c.NbConvertApp.notebooks = ["mynotebook.ipynb"] 
c.NbConvertApp.export_format = 'html' 
c.Exporter.preprocessors = ['extractoutput.ExtractOutputPreprocessor'] 

Wo ["mynotebook.ipynb"] ist die Datei, oder eine Liste von Dateien, die ich konvertieren möchten. Der Teil, der steuert, wie das Notebook konvertiert wird, ist in diesem Fall 'extractoutput.ExtractOutputPreprocessor'.

extractoutput.ExtractOutputPreprocessor bezieht sich auf extractoutput.py, die auch als die Notebooks im selben Verzeichnis ist (obwohl ich es nicht denken muss sein).

extractoutput.ExtractOutputPreprocessor bezieht sich auf eine Funktion, in extractoutput.py, der angibt, wie die Ausgabe verarbeitet werden.

In meinem Fall ist der Inhalt dieser Datei genau aus der IPython repo mit einer kleinen Änderung übernommen.Linie 22 (from .base import Preprocessor) ein

ValueError: Attempted relative import in non-package

error, weil sie nicht weiß, wo für das Paket zu suchen. Wenn geändert

fromIPython.nbconvert.preprocessors.base import Preprocessor

dann funktioniert es und alle Bild-Assets in das mynotebook_files Verzeichnis.

Ich musste die HTML output template in diesem Fall nicht bearbeiten, wusste es, wo man trotzdem sucht.