Estou usando tqdm
para imprimir o progresso de um script que estou executando em um notebook Jupyter. Estou imprimindo todas as mensagens no console via tqdm.write()
. No entanto, isso ainda me dá uma saída assimétrica assim:
Ou seja, cada vez que uma nova linha precisa ser impressa, uma nova barra de progresso é impressa na próxima linha. Isso não acontece quando eu executo o script via terminal. Como posso resolver isso?
python
jupyter-notebook
tqdm
Rohan Saxena
fonte
fonte
tqdm_notebook
, posso fazerprint
s normais , e isso não afeta a barra de progresso.progressbar
stackoverflow.com/questions/3160699/python-progress-bar/...Respostas:
Tente usar em
tqdm.notebook.tqdm
vez detqdm
, conforme descrito aqui .Isso pode ser tão simples quanto alterar sua importação para:
from tqdm.notebook import tqdm
Boa sorte!
EDIT: Após o teste, parece que
tqdm
realmente funciona bem no 'modo de texto' no notebook Jupyter. É difícil dizer porque você não forneceu um exemplo mínimo , mas parece que seu problema é causado por uma declaração de impressão em cada iteração. A instrução de impressão está gerando um número (~ 0,89) entre cada atualização da barra de status, que está atrapalhando a saída. Tente remover a declaração de impressão.fonte
print()
declaração, eu useitqdm.write()
. No entanto,tqdm_notebook
dá bons resultados. Obrigadotqdm
, e nãotqdm_notebook
? Isso funciona bem com o Python 3.6 e o Jupyter 1.0.0.Esta é uma resposta alternativa para o caso em que tqdm_notebook não funciona para você.
Dado o seguinte exemplo:
A saída seria mais ou menos assim (o progresso seria exibido em vermelho):
O problema é que a saída para stdout e stderr é processada de forma assíncrona e separada em termos de novas linhas.
Se, por exemplo, o Jupyter recebe no stderr a primeira linha e a saída "processada" no stdout. Então, uma vez que ele recebe uma saída no stderr para atualizar o progresso, ele não volta e atualiza a primeira linha, pois atualiza apenas a última linha. Em vez disso, terá que escrever uma nova linha.
Solução alternativa 1, gravando no stdout
Uma solução alternativa seria produzir ambos para stdout:
A saída mudará para (não mais vermelho):
Aqui podemos ver que Jupyter parece não estar limpo até o final da linha. Poderíamos adicionar outra solução alternativa para isso adicionando espaços. Tal como:
O que nos dá:
Solução 2, defina a descrição em vez disso
Em geral, pode ser mais direto não ter duas saídas, mas atualizar a descrição, por exemplo:
Com a saída (descrição atualizada durante o processamento):
Conclusão
Você pode fazê-lo funcionar bem com o tqdm comum. Mas se o tqdm_notebook funcionar para você, use-o (mas você provavelmente não leria até agora).
fonte
progressbar
stackoverflow.com/a/34482761/1207193A maioria das respostas está desatualizada agora. Melhor se você importar o tqdm corretamente.
fonte
TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0 Please use tqdm.notebook.tqdm instead of tqdm.tqdm_notebook
Se as outras dicas aqui não funcionarem e - assim como eu - você estiver usando a
pandas
integraçãoprogress_apply
, podetqdm
lidar com isso:O ponto principal aqui reside no
tqdm.autonotebook
módulo. Conforme indicado em suas instruções para uso em notebooks IPython , isso faz atqdm
escolha entre os formatos de barra de progresso usados nos notebooks Jupyter e nos consoles Jupyter - por um motivo ainda carente de mais investigações do meu lado, o formato específico escolhido portqdm.autonotebook
funcionar sem problemaspandas
, enquanto todos os outros não para,progress_apply
especificamente.fonte
Para concluir a resposta do oscarbranson: é possível escolher automaticamente versões de console ou notebook da barra de progresso, dependendo de onde está sendo executada:
Mais informações podem ser encontradas aqui
fonte
Nenhuma das opções acima funciona para mim. Acho que executar o seguinte classifica esse problema após um erro (ele limpa todas as instâncias das barras de progresso em segundo plano):
fonte
try: # Avoids problem on notebooks / Hydrogen IDE tqdm.tqdm._instances.clear() except Exception: pass
Para todos que estão no Windows e não conseguiram resolver o problema das barras duplicadas com qualquer uma das soluções mencionadas aqui. Eu tive que instalar o
colorama
pacote como indicado nos problemas conhecidos do tqdm que o corrigiam .Experimente com este exemplo:
O que produzirá algo como:
fonte
Use tqdm_notebook
fonte