herrlich10
Por lo general, tengo que volver a ejecutar (la mayor parte de) un cuaderno cuando lo vuelvo a abrir, para poder acceder a las variables previamente definidas y seguir trabajando.
Sin embargo, a veces me gustaría omitir algunas de las celdas, que no tienen influencia en las celdas posteriores (p. ej., pueden comprender una rama de análisis que está terminada) y pueden tardar mucho tiempo en ejecutarse. Estas celdas se pueden dispersar por todo el cuaderno, por lo que algo como “Ejecutar todo a continuación” no ayudará mucho.
¿Hay una manera de lograr esto?
Idealmente, esas celdas podrían etiquetarse con algunas banderas especiales, de modo que pudieran “Ejecutarse” manualmente, pero se omitirían cuando “Ejecutar todo”.
EDITAR
%%cache
(extensión ipycache) como lo sugiere @Jakob resuelve el problema hasta cierto punto.
En realidad, ni siquiera necesito cargar ninguna variable (que puede ser grande pero innecesaria para las siguientes celdas) cuando se vuelve a ejecutar, solo la salida almacenada importa como resultados de análisis.
Como solución temporal, coloque %%cache folder/unique_identifier
al principio de la celda. El código se ejecutará solo una vez y no se cargarán variables cuando se vuelva a ejecutar, a menos que elimine el archivo de identificador_único.
Desafortunadamentetodos los resultados de salida se pierden cuando se vuelve a ejecutar con %%cache
…
EDITAR II (14 de octubre de 2013)
La versión maestra de ipython+ipycache ahora también selecciona (y vuelve a mostrar) la salida de la celda de código.
Para salidas de visualización enriquecidas que incluyen Latex, HTML (salida de pandas DataFrame), recuerde usar el método display() de IPython, por ejemplo, display(Latex(r'$\alpha_1$'))
Marca
Aunque esto no es exactamente lo que parece estar buscando, si desea omitir por completo la ejecución de una celda (donde no se cargan los resultados almacenados en caché), puede agregar el siguiente truco al comienzo de una celda (suponiendo que está utilizando un sistema operativo basado en Unix):
%%script false
o una variante (en funcionamiento desde principios de 2020; consulte aquí para la explicación):
%%script false --no-raise-error
-
¿Alguien sabe cómo hacer esto en Windows?
– Royco
18 de febrero de 2017 a las 22:10
-
Funciona perfectamente en windows. La salida del cuaderno será “No se pudo encontrar el programa: ‘falso'”.
– DJV
13 de junio de 2019 a las 7:33
-
Esto dejó de funcionar en algún momento en 2019. Puede encontrar nuevas soluciones aquí.
– estación
19 de enero de 2020 a las 0:40
-
en su lugar, use esto ya que funciona en todas las plataformas conocidas: %% salto de eco de secuencia de comandos
– dabru
17 sep 2020 a las 17:09
-
Qué pasa
%%script true
en lugar de%%script false --no-raise-error
?– wjandrea
21 de noviembre de 2021 a las 19:37
Jakob
Actualmente, no existe tal característica incluida en el cuaderno de IPython. Sin embargo, existen algunas posibilidades para facilitarte la vida, como:
-
utilizar el
%store
o tal vez mejor el%%cache
magia (extensión) para almacenar los resultados de estas celdas intermitentemente, para que no tengan que volver a calcularse (ver https://github.com/rossant/ipycache) -
Agrega un
if==0:
antes de las celdas que no desea ejecutar -
convierta estas celdas en celdas sin procesar (¡pero perderá la salida ya almacenada!)
(ver discusión en https://github.com/ipython/ipython/issues/2125)
-
Es bueno saber acerca de la extensión ipycache, que funciona de manera similar a lo que estoy haciendo (manualmente) ahora, ¡pero solo que mejor! El
%%cache
La magia sirve efectivamente como indicador especial cuando “Ejecutar todo”, y la repetición manual requiere simplemente la eliminación del archivo de caché. ¡Brillante! Gracias, Jakob~– herrlich10
11/10/2013 a las 15:41
-
De hecho, usar %%cache es mucho más conveniente que manejar manualmente con %store. %store necesita enviar una por una las variables para guardar, pero puede leer todo a la vez, poco sin sentido. %%cache funciona perfectamente para toda la celda y %store funciona mejor para variables individuales.
– m3nda
11 de abril de 2018 a las 3:26
-
ipycache
ya no se mantiene. ¿Conoce alguna otra solución?– Chris_Rands
4 de febrero de 2020 a las 13:18
-
@Chris_Rands actualmente uso la extensión de congelación. Puede preguntarle directamente a Rossant.
– Jakob
4 de febrero de 2020 a las 20:21
dabru
Aquí hay una solución simple y universal sin necesidad de soluciones alternativas: simplemente escriba esto como la línea superior de la celda para omitir la celda:
%%script echo skipping
Está probado en Windows y Mac con Jupyter reciente, y creo que también debería funcionar en otras plataformas similares a Unix porque también tienen un echo
dominio. Algunas de las otras soluciones propuestas son más específicas de la plataforma.
Por supuesto, puedes poner el texto que quieras en lugar de “saltar”. Cuando ejecuta la celda, simplemente imprimirá este texto en lugar de ejecutar el código en la celda.
-
Funciona en Hydrogen en Ubuntu
– wjandrea
21 de noviembre de 2021 a las 22:18
-
Funciona mucho mejor que
%% false
ya que no crea un error. Esto es muy bueno si no necesita mantener la salida anterior.– Olsgard
19 oct 2022 a las 6:37
-
En realidad, resulta que esto funciona, pero normalmente crea un error (ignorado) en Windows a menos que tenga un comando de eco en su ruta (por ejemplo, al instalar cygwin, gnuwin32, bash, etc.)
– dabru
19 oct 2022 a las 15:51
-
También funciona maravillosamente en Google Colab…
– Reuven
31 de enero a las 5:16
Si no se espera que se carguen resultados almacenados en caché, encuentro el Freeze
nbextension bastante útil para este fin.
Aunque no es oficial, recomiendo encarecidamente probar estas extensiones de portátiles si nunca las ha usado antes.
Para instalar la maquinaria de extensión,
$ pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install
Para habilitar el Freeze
extensión, lanzamiento jupyter notebook
y abra un nuevo cuaderno, desde el menú, seleccione Edit
> nbextensions config
y luego verifique Freeze
.
Esta pregunta es un poco más antigua, pero parece que falta la respuesta más conveniente. Puede utilizar las ‘celdas de inicialización’ de NBextensions. Una vez instalado/activado, puede marcar celdas en cualquier cuaderno como “celdas de inicialización” que luego se pueden ejecutar con un botón específico.
- Instalar NBextensions:aquí
-
Active las ‘celdas de inicialización’ cuando inicie el panel de jupyter
-
En su cuaderno, en el menú ‘ver’, elija ‘barra de herramientas de celda’ y luego ‘celda de inicialización’
- Junto a cada celda ahora hay una casilla de verificación. Marque todas las celdas que desea ejecutar para la inicialización
- Al volver a abrir un cuaderno, haga clic en el botón que parece una calculadora de bolsillo para ejecutar todas las celdas de inicialización.
Rajan Verma – Aarvy
La forma más sencilla de omitir la ejecución del código Python en la celda del cuaderno jupyter, convierto temporalmente esas celdas en rebajas.
andrea
El %%script false
solución dejó de funcionar en algún momento en 2019.
Aquí hay algunas otras soluciones disponibles. Estos se basan en programas que ignoran sus argumentos cuando les dices que no esperen ninguno. Aquí hay algunos ejemplos fáciles:
Perl:
%%perl -e0
for i in range(10): print(i)
Aquí estás ejecutando: perl -e '0' cellcontents
Una versión más memorable:
%%perl -eat
for i in range(10): print(i)
Aquí estás ejecutando: perl -e 'at' cellcontents
Intento:
%%bash -c :
for i in range(10): print(i)
:
es un no-op en bash, por lo que está ejecutando: bash -c : cellcontents
No he mirado el código de implementación de magia externa, pero estoy bastante seguro de que los “contenidos de celda” se pasan como argumentos y no serán interpretados por Shell por error, digamos si tuviera que incluir ;
en ellos e inyectar accidentalmente un código incorrecto. Pero no puedo garantizarte eso.
Estoy seguro de que puede encontrar otras soluciones creativas, mirando los programas compatibles aquí: https://ipython.readthedocs.io/en/stable/interactive/magics.html#cell-magics
-
%%script false –no-raise-error funciona para el Jupyter que probé hoy
–David Fiocco
19 de enero de 2020 a las 21:09
-
de hecho, lo hace, pero es demasiado largo para escribir y recordar… Idealmente, ipython debería tener un
%%script noop
o algo similar, por lo que es una función y no una solución.– estación
19 de enero de 2020 a las 22:34
-
¿Por qué soluciones tan complicadas? Hay un comando POSIX que siempre devuelve verdadero. Puedes usar:
%%script true
– pabouk – Ucrania se mantiene fuerte
4 de junio de 2022 a las 12:24
Si no necesita volver a mostrar la salida, puede definir su propia magia de salto como lo hice aquí: stackoverflow.com/a/43584169/4098821
– robar
24 de abril de 2017 a las 9:21