Ejecutar un cuaderno IPython / Jupyter de forma no interactiva

79

¿Alguien sabe si es posible ejecutar un cuaderno IPython / Jupyter de forma no interactiva desde la línea de comandos y .ipynbguardar el archivo resultante con los resultados de la ejecución? Si aún no es posible, ¿qué tan difícil sería implementar con phantomJS, algo para encender y apagar el kernel y algo para encender y apagar el servidor web?

Para ser más específicos, supongamos que ya tengo un cuaderno original.ipynby quiero volver a ejecutar todas las celdas en ese cuaderno y guardar los resultados en un nuevo cuaderno new.ipynb, pero haga esto con un solo comando en la línea de comandos sin requerir interacción ni en el navegador ni para cerrar el kernel o servidor web, y suponiendo que no se esté ejecutando ningún kernel o servidor web.

comando de ejemplo:

$ ipython notebook run original.ipynb --output=new.ipynb

Davidshinn
fuente

Respuestas:

70

Sí, es posible y fácil, estará (principalmente) en el núcleo de IPython para 2.0, sugeriría mirar esos ejemplos por ahora.

[editar]

$ jupyter nbconvert --to notebook --execute original.ipynb --output=new.ipynb

Ahora está en Jupyter NbConvert. NbConvert viene con un montón de correos electrónicos Preprocessorque están deshabilitados por defecto, dos de ellos ( ClearOutputPreprocessory ExecutePreprocessor) son de interés. Puede habilitarlos en su (s) archivo (s) de configuración (local | global) a través de c.<PreprocessorName>.enabled=True(Mayúsculas que es python), o en la línea de comando --ExecutePreprocessor.enabled=Truemanteniendo el resto del comando como de costumbre.

El --ExecutePreprocessor.enabled=Truetiene convenientes --executealias que se pueden utilizar en la versión reciente de NbConvert. Se puede combinar con --inplacesi se desea

Por ejemplo, conviértalo a html después de ejecutar el portátil sin cabeza:

$ jupyter nbconvert --to=html --execute RunMe.ipynb

convertir a PDF después de eliminar las salidas

$ ipython nbconvert --to=pdf --ClearOutputPreprocessor.enabled=True RunMe.ipynb

Esto (por supuesto) funciona con kernels que no son de Python al generar un <insert-your-language-here>kernel, si lo configura --profile=<your fav profile>. La conversión puede ser muy larga ya que necesita volver a ejecutar el portátil. Puede realizar la conversión de portátil a portátil con el--to=notebook opción.

Hay varias otras opciones (tiempo de espera, permitir errores, ...) que es posible que deban configurarse / desarmarse según el caso de uso. Consulte la documentación y, por supuesto jupyter nbconvert --help, --help-allo la documentación en línea de nbconvert para obtener más información.

Mate
fuente
1
Gracias por señalarme en la dirección correcta. Como no se publicó el código exacto, bifurqué uno de los gists y agregué el código de salida para que lo siguiente ejecute un cuaderno desde la línea de comandos como un $ ipnbdocttest.py original.ipynb new.ipynb gist.github.com/davidshinn/6110231
davidshinn
3
No, no en IPython 2, en camino para IPython 3
Matt
7
Parece que esto es ahora (Ipython 3.1.0): ipython nbconvert --to=html --execute RunMe.ipynb
patricksurry
5
@NoahR Prueba --ExecutePreprocessor.timeout=-1 ref
Lenna
5
El último jupyter (4.1.0) de hecho permite ejecutar cuadernos de forma no interactiva, jupyter nbconvert --to notebook --execute --allow-errors notebook.ipynbtal vez la respuesta podría editarse
mgalardini
20

Hasta que esta funcionalidad se convierta en parte del núcleo, armé una pequeña aplicación de línea de comandos que hace exactamente lo que quieres. Se llama runipy y puedes instalarlo con pip install runipy. La fuente y el archivo Léame están en github .

Pablo
fuente
runipy no parece funcionar tan bien para mí: no actualiza el signaturecampo y, como consecuencia (bueno, creo que es una consecuencia), ninguno de mis SVG se representa realmente: IPython prefiere mostrar la __repr__representación textual sin formato en su lugar .
Akim
1

Ejecute y reemplace el archivo .ipunb original:

jupyter nbconvert --ExecutePreprocessor.timeout=-1 --to notebook --inplace --execute original.ipynb
Manualmsdos
fuente
1

Para cubrir algunas características como trabajadores paralelos, parámetros de entrada, envío de correo electrónico o entrada / salida S3 ... puedes instalar jupyter-runner

pip install jupyter-runner

Léame en github: https://github.com/omar-masmoudi/jupyter-runner

Omar
fuente
-5

Puede ejecutar el servidor iPython-Notebook-server a través de la línea de comando:

ipython notebook --pylab inline

Esto iniciará el servidor en modo no interactivo y todos los resultados se imprimen debajo del código. Luego puede guardar el archivo .ipynb que incluye Código y Salida.

ala
fuente
Gracias por la respuesta, sin embargo, estaba buscando una solución más específica que no requiriera intervención en el navegador web ni cerrar el kernel y el servidor web. Edité la pregunta para ser más específica.
Davidshinn
En este caso, no sé cómo proceder. ¿Planea hacer esto de forma regular? El iPython-Notebook está diseñado para usarse de forma interactiva en un navegador y guardar archivos ipynb específicos desde la línea de comandos me parece bastante extraño.
ala
Sí, planeo hacer esto muy a menudo, si estuviera disponible. Sería muy útil en los casos en que las fuentes de datos cambian con frecuencia y quiero ver el resultado de diagnóstico del uso de pandas intercalado con el código que produjo, exactamente lo que hace muy bien el cuaderno ipython. Sin embargo, si tengo que ejecutar muchos de estos tipos de procesos al día, sería mejor si se pudieran ejecutar por lotes y luego pudiera ver la salida más tarde, como si se produjeran archivos de registro. El problema con el registro estándar es que es difícil ver el código y la salida intercalados entre sí.
Davidshinn
4
Este me parece un caso de uso increíblemente útil. Puede tomar un cuaderno de plantilla, parametrizarlo un poco y luego obtener una solución imprimible completamente ejecutada, todo sin tocar un navegador.
holdenweb