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:
På 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.
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()
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)