Hvordan konverterer jeg en IPython Notebook til en Python-fil via kommandolinjen?

Jeg ser på å bruke *.ipynb-filene som sannhetskilde og programmatisk 'kompilere' dem til .py-filer for planlagte jobber/oppgaver.

Den eneste måten jeg forstår å gjøre dette på er via GUI. Finnes det en måte å gjøre det på via kommandolinjen?

Hvis du ikke vil skrive ut et Python-skript hver gang du lagrer, eller hvis du ikke vil starte IPython-kjernen på nytt:

kommandolinjen kan du bruke nbconvert:

$ jupyter nbconvert --to script [YOUR_NOTEBOOK].ipynb

Som et lite hack, kan du til og med kalle kommandoen ovenfor i en IPython-notatbok ved å legge til ! (brukes for ethvert kommandolinjeargument). Inne i en notisbok:

!jupyter nbconvert --to script config_template.ipynb

Før --to script ble lagt til, var alternativet --to python eller --to=python, men det ble omdøpt i overgangen til et språkagnostisk notebook-system.

Kommentarer (13)

Her er en rask og enkel måte å trekke ut koden fra V3- eller V4-ipynb uten å bruke ipython. Den sjekker ikke celletyper osv.

import sys,json

f = open(sys.argv[1], 'r') #input.ipynb
j = json.load(f)
of = open(sys.argv[2], 'w') #output.py
if j["nbformat"] >=4:
        for i,cell in enumerate(j["cells"]):
                of.write("#cell "+str(i)+"\n")
                for line in cell["source"]:
                        of.write(line)
                of.write('\n\n')
else:
        for i,cell in enumerate(j["worksheets"][0]["cells"]):
                of.write("#cell "+str(i)+"\n")
                for line in cell["input"]:
                        of.write(line)
                of.write('\n\n')

of.close()
Kommentarer (2)

Du kan gjøre dette fra IPython API.

from IPython.nbformat import current as nbformat
from IPython.nbconvert import PythonExporter

filepath = 'path/to/my_notebook.ipynb'
export_path = 'path/to/my_notebook.py'

with open(filepath) as fh:
    nb = nbformat.reads_json(fh.read())

exporter = PythonExporter()

# source is a tuple of python source code
# meta contains metadata
source, meta = exporter.from_notebook_node(nb)

with open(export_path, 'w+') as fh:
    fh.writelines(source)
Kommentarer (1)