Estoy usando tqdm
para imprimir el progreso en un script que estoy ejecutando en un cuaderno Jupyter. Estoy imprimiendo todos los mensajes a la consola a través de tqdm.write()
. Sin embargo, esto todavía me da una salida sesgada como esta:
Es decir, cada vez que se debe imprimir una nueva línea, se imprime una nueva barra de progreso en la siguiente línea. Esto no sucede cuando ejecuto el script a través de la terminal. ¿Como puedo resolver esto?
python
jupyter-notebook
tqdm
Rohan Saxena
fuente
fuente
tqdm_notebook
, incluso puedo hacerprint
s normales , y no afecta la barra de progreso.progressbar
stackoverflow.com/questions/3160699/python-progress-bar/…Respuestas:
Intente usar en
tqdm.notebook.tqdm
lugar detqdm
, como se describe aquí .Esto podría ser tan simple como cambiar su importación a:
from tqdm.notebook import tqdm
¡Buena suerte!
EDITAR: después de probar, parece que
tqdm
realmente funciona bien en 'modo de texto' en el cuaderno Jupyter. Es difícil saberlo porque no ha proporcionado un ejemplo mínimo , pero parece que su problema es causado por una declaración de impresión en cada iteración. La declaración de impresión está superando un número (~ 0.89) entre cada actualización de la barra de estado, lo que está desordenando la salida. Intente eliminar la declaración de impresión.fuente
print()
declaración, solíatqdm.write()
. Sin embargo,tqdm_notebook
da buenos resultados. Graciastqdm
, en lugar detqdm_notebook
? Esto funciona bien con Python 3.6 y Jupyter 1.0.0.Esta es una respuesta alternativa para el caso donde tqdm_notebook no funciona para usted.
Dado el siguiente ejemplo:
El resultado se vería así (el progreso se mostraría en rojo):
El problema es que la salida a stdout y stderr se procesan de forma asíncrona y por separado en términos de nuevas líneas.
Si digamos, Jupyter recibe en stderr la primera línea y luego la salida "procesada" en stdout. Luego, una vez que recibe una salida en stderr para actualizar el progreso, no volvería y actualizaría la primera línea, ya que solo actualizaría la última línea. En su lugar, tendrá que escribir una nueva línea.
Solución 1, escribir en stdout
Una solución alternativa sería generar ambos en stdout en su lugar:
La salida cambiará a (no más rojo):
Aquí podemos ver que Jupyter no parece despejarse hasta el final de la línea. Podríamos agregar otra solución para eso agregando espacios. Como:
Lo que nos da:
Solución 2, establezca la descripción en su lugar
En general, podría ser más sencillo no tener dos salidas, sino actualizar la descripción, por ejemplo:
Con la salida (descripción actualizada mientras se está procesando):
Conclusión
En su mayoría, puede hacer que funcione bien con tqdm simple. Pero si tqdm_notebook funciona para usted, solo use eso (pero probablemente no leería tan lejos).
fuente
progressbar
stackoverflow.com/a/34482761/1207193La mayoría de las respuestas están desactualizadas ahora. Mejor si importa tqdm correctamente.
fuente
TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0 Please use tqdm.notebook.tqdm instead of tqdm.tqdm_notebook
Si los otros consejos aquí no funcionan y, al igual que yo, está utilizando la
pandas
integraciónprogress_apply
, puede dejar detqdm
manejarlo:El punto principal aquí radica en el
tqdm.autonotebook
módulo. Como se indica en sus instrucciones de uso en las computadoras portátiles IPython , esto hace quetqdm
elegir entre los formatos de barra de progreso utilizados en las computadoras portátiles Jupyter y las consolas Jupyter, por una razón que aún carece de más investigaciones de mi parte, el formato específico elegido portqdm.autonotebook
funciona sin problemaspandas
, mientras que todos los demás no lo hicieron. 't, porprogress_apply
específicamente.fuente
Para completar la respuesta de oscarbranson: es posible elegir automáticamente versiones de consola o portátil de la barra de progreso dependiendo de dónde se ejecuta:
Más información se puede encontrar aquí
fuente
Nada de lo anterior funciona para mí. Me parece que ejecutar lo siguiente soluciona este problema después del error (solo borra todas las instancias de barras de progreso en segundo plano):
fuente
try: # Avoids problem on notebooks / Hydrogen IDE tqdm.tqdm._instances.clear() except Exception: pass
Para todos los que están en Windows y no pudieron resolver el problema de las barras duplicadas con ninguna de las soluciones mencionadas aquí. Tuve que instalar el
colorama
paquete como se indica en los problemas conocidos de tqdm que lo arreglaron.Pruébalo con este ejemplo:
Lo que producirá algo como:
fuente
Utilice tqdm_notebook
fuente