Stefan Krawczyk
Estoy buscando usar el *.ipynb archivos como la fuente de la verdad y ‘compilarlos’ programáticamente en archivos .py para trabajos/tareas programadas.
La única forma en que entiendo hacer esto es a través de la GUI. ¿Hay alguna manera de hacerlo a través de la línea de comandos?
guillermo
Si no desea generar una secuencia de comandos de Python cada vez que guarda, o no desea reiniciar el kernel de IPython:
Sobre el línea de comandopuedes usar nbconvert
:
$ jupyter nbconvert --to script [YOUR_NOTEBOOK].ipynb
Como un pequeño truco, incluso puedes llamar al comando anterior en un cuaderno IPython por pre-pendiente !
(utilizado para cualquier argumento de línea de comando). Dentro de un cuaderno:
!jupyter nbconvert --to script config_template.ipynb
Antes --to script
era agregadola opción era --to python
o --to=python
pero fue renombrado en el movimiento hacia un sistema de cuaderno agnóstico del lenguaje.
-
Si SÍ quieres uno cada vez que lo guardes, en
jupyter
puedes desencadenarnbconvert
a través de ganchos previos o posteriores al guardado:ContentsManager.pre_save_hook
abdFileContentsManager.post_save_hook
. Agregarías un gancho posterior al guardadojupyter nbconvert --to script [notebook]
– jaimedash
3 mayo 2016 a las 16:35
-
¿Hay alguna manera de hacer lo contrario, es decir, convertir de un script de python a un cuaderno? Por ejemplo, ¿tener algunas cadenas de documentos especializadas que se analizan en celdas?
– Sujen Shah
17/01/2017 a las 17:40
-
convertir todos los cuadernos en una carpeta
jupyter nbconvert --to script /path/to/notebooks/*.ipynb
– abierto
22 de julio de 2017 a las 0:00
-
¡Gracias, funciona!, pero ¿y si no quiero el
# In[ ]:
escriba cosas en el script, quiero que esté limpio. ¿Hay alguna forma de hacer eso?– Rishabh Agrahari
31 de enero de 2018 a las 10:48
-
@RishabhAgrahari Lo siguiente parece funcionar para mí.
!jupyter nbconvert --to script --no-prompt notebook.ipynb
– tormenta de bytes
27 de mayo de 2019 a las 7:09
Břetislav Hájek
Si desea convertir todo *.ipynb
archivos del directorio actual a la secuencia de comandos de python, puede ejecutar el comando de esta manera:
jupyter nbconvert --to script *.ipynb
-
O puede ejecutar: ipython nbconvert –to script *.ipynb
– Andrei
23 de diciembre de 2020 a las 11:28
-
para convertir mediante programación como en una función, use esta sintaxis: subprocess.run([‘jupyter’, ‘nbconvert’,ipynb_file,”–to”, “script”,”–output”,r’temp_converted_py’],shell=True) tenga en cuenta que ipynb_file es una variable
– usuario15420598
28 de diciembre de 2021 a las 18:49
Aquí hay una forma rápida y sucia de extraer el código de V3 o V4 ipynb sin usar ipython. No comprueba los tipos de células, etc.
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()
-
La mejor respuesta si no desea instalar ninguna de las herramientas de Jupyter.
– dacracot
3 oct 2016 a las 14:38
-
Me gusta esto. Pero descubrí que cuando descargué el formato .py de los portátiles Jupyter, usa finales de línea UNIX aunque estoy en Windows. Para generar lo mismo, agregue el
newlines='\n'
como tercer argumento en la llamada al archivo de salida abierto. (Python 3.x)– Rufus VS
30 de mayo de 2019 a las 19:19
-
Esta respuesta abre la posibilidad de leer etiquetas y extraer solo aquellas celdas que la tengan. Más difícil de hacer solo a través de la línea de comandos.
–Pablo Adames
9 de agosto de 2020 a las 23:57
Siguiendo el ejemplo anterior pero con el nueva versión lib de nbformat :
import nbformat
from nbconvert import PythonExporter
def convertNotebook(notebookPath, modulePath):
with open(notebookPath) as fh:
nb = nbformat.reads(fh.read(), nbformat.NO_CONVERT)
exporter = PythonExporter()
source, meta = exporter.from_notebook_node(nb)
with open(modulePath, 'w+') as fh:
fh.writelines(source.encode('utf-8'))
Wayne
jupytexto es bueno tenerlo en su cadena de herramientas para tales conversiones. No solo permite la conversión de un cuaderno a un script, sino que también puede volver del script al cuaderno. E incluso tener ese cuaderno producido en forma ejecutada.
jupytext --to py notebook.ipynb # convert notebook.ipynb to a .py file
jupytext --to notebook notebook.py # convert notebook.py to an .ipynb file with no outputs
jupytext --to notebook --execute notebook.py # convert notebook.py to an .ipynb file and run it
-
Aparentemente también hay ipynb-py-convert, mira aquí.
– Wayne
10 de enero de 2020 a las 18:34
-
‘jupytext’ no se reconoce como un comando interno o externo, un programa operativo o un archivo por lotes.
– Amine Chadi
31 de marzo de 2020 a las 15:53
-
¿Lo has instalado @AmineChadi. Ver aquí para saber cómo hacer eso. Si lo está utilizando a través de una computadora portátil como su interfaz de línea de comandos, simplemente puede ejecutar
%pip install jupytext
en tu cuaderno.– Wayne
31 de marzo de 2020 a las 20:16
wwwslinger
Puede hacerlo desde la API de IPython.
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)
-
Aparentemente también hay ipynb-py-convert, mira aquí.
– Wayne
10 de enero de 2020 a las 18:34
-
‘jupytext’ no se reconoce como un comando interno o externo, un programa operativo o un archivo por lotes.
– Amine Chadi
31 de marzo de 2020 a las 15:53
-
¿Lo has instalado @AmineChadi. Ver aquí para saber cómo hacer eso. Si lo está utilizando a través de una computadora portátil como su interfaz de línea de comandos, simplemente puede ejecutar
%pip install jupytext
en tu cuaderno.– Wayne
31 de marzo de 2020 a las 20:16
Sachin Hatikankan
Entiendo que este es un hilo viejo. Me he enfrentado al mismo problema y quería convertir el archivo .pynb en un archivo .py a través de la línea de comandos.
Mi búsqueda me llevó a ipynb-py-convertir
Siguiendo los pasos a continuación, pude obtener el archivo .py
- Instale “pip install ipynb-py-convert”
- Vaya al directorio donde se guarda el archivo ipynb a través del símbolo del sistema
- Ingrese el comando
> ipynb-py-convert YourFileName.ipynb YourFilename.py
P.ej:. ipynb-py-convert primeros pasos con kaggle-titanic-problem.ipynb primeros pasos con kaggle-titanic-problem.py
El comando anterior creará una secuencia de comandos de python con el nombre “YourFileName.py” y, según nuestro ejemplo, creará getting-started-with-kaggle-titanic-problem.py
archivo
¿A qué te refieres con “fuente de la verdad”? Los cuadernos de IPython son solo archivos json. Puede cargarlos y manipularlos como diccionarios de Python. Para el código fuente deberías estar iterando
input
llaves dondecell_type
es igual a ‘código’. Echa un vistazo a esto esquema– theta
13 de junio de 2013 a las 1:03
Bueno, quiero almacenar el .ipynb en un repositorio y no los archivos .py. Entonces, como un ‘paso de compilación’, convertiría los archivos .ipynb a .py para uso real por parte del sistema automatizado. Tienes razón, podría simplemente cargar el json y generar solo las celdas de código, pero me preguntaba si ya había algo que hiciera eso por mí 🙂
– Stefan Krawczyk
13 de junio de 2013 a las 1:17