Ipython: O recurso "Baixar como PDF" mostra mensagens de erro inúteis e requer grande dependência

Criado em 8 fev. 2015  ·  40Comentários  ·  Fonte: ipython/ipython

Esta é mais uma solicitação de recurso porque testei o recurso "baixar como PDF" no Ubuntu 14.10 usando o novo notebook (Ipython 3) e funciona muito bem. O problema é que quando tentei pela primeira vez, não tinha as dependências necessárias e recebi um erro dizendo ! LaTeX Error: File 'adjustbox.sty' not found . Tentei contornar esse problema instalando apenas ojustbox.sty, mas, no final das contas, tive que instalar texlive-latex-extra .

O problema é que isso requer uma instalação de, pelo menos, 584 MB. Essa é uma grande dependência para um recurso muito específico. Portanto, há algumas sugestões:

  1. Mostra uma mensagem de erro mais direta quando uma dependência como a caixa de ajuste não é encontrada na página de erro 500 do bloco de notas. Atualmente, o erro diz: nbconvert failed: PDF creating failed
  2. A longo prazo, seria ótimo converter para PDF usando um serviço da web da mesma forma que o Google Drive ao baixar um PDF de um documento.
nbconvert

Comentários muito úteis

Obrigado por concordar com isso, todos, estou examinando e corrigindo antigos problemas que foram resolvidos, e este está pronto para ser encerrado.

Houve muita discussão boa acontecendo nesta questão, mas para resumir:

1. Uma mensagem mais detalhada agora é exibida quando a conversão falha. No notebook versão 4.2.2, remover o arquivo .sty em questão em minha máquina produz uma mensagem de erro semelhante a esta:

screen shot 2016-10-27 at 11 57 41 am

2. não pretendemos fornecer a conversão de cadernos para PDF como um serviço da web
3. se um terceiro tornar esse serviço da web disponível, o download do notebook integrado foi explícito sobre o uso do LaTeX desde # 7951 - e tem a seguinte aparência:

screen shot 2016-10-27 at 12 01 12 pm

4. Quanto ao tamanho das dependências necessárias, uma solução alternativa foi proposta por @iuridiniz logo acima deste comentário.

Qualquer discussão futura sobre esses e outros problemas relacionados provavelmente deve ocorrer em https://github.com/jupyter/nbconvert .

Feliz hacking! :gravata-borboleta:

Todos 40 comentários

O erro de látex apareceu na página de erro HTML ou apenas no terminal?
Contanto que a mensagem de erro específica chegue à página de erro, acho
é tudo o que podemos fazer. Não vamos tentar analisar por que o látex falhou - estou
certeza de que há muitas maneiras possíveis.

Seria interessante investigar formas alternativas de produzir um PDF,
como usar reportlab ou wkhtmltopdf. Definitivamente não deveríamos gritar
para um serviço da web por padrão.

O erro de látex apareceu no terminal. Na página de erro HTML, a única mensagem que recebi foi nbconvert failed: PDF creating failed . Que tal adicionar o traceback à página de erro HTML?

Esqueci de mencionar que a ideia de usar um serviço web era para ser um fallback quando ocorre um erro na instalação local. Não deveria ser bastante simples criar um servidor que recebe solicitações para converter arquivos ipynb semelhante ao que o nbviewer faz?

Webservice como nbviewer são opt-in pessoas que tornam seu trabalho público explicitamente e na internet.
Ter um serviço da web para PDF por padrão seria muito ruim para a privacidade e tornaria o notebook inutilizável online.

O único serviço que faz isso por enquanto é o matjax, porque era muito grande. E para 4.0 nós o enviaremos como parte do IPython.

@Carreau Não estou dizendo que o PDF seria publicado online publicamente, mas sim convertido em um servidor gerenciado pela Ipython e entregue como um download para o usuário como um fallback caso não haja uma instalação adequada na máquina local.

É muito desaprovado no mundo do código aberto ter um software que envia automaticamente seus dados a um servidor quando você não pediu explicitamente para fazer isso. Poderíamos concebivelmente fazer algo assim como uma opção explícita 'converter para PDF nos servidores do IPython', mas não faríamos isso como um fallback quando a conversão local falhasse.

Sim, você está certo, isso seria melhor. Talvez uma mensagem dizendo que algo deu errado com a conversão e um botão extra para baixar o arquivo usando um serviço da web externo.

Acho que isso seria possível, mas, neste caso, por que parar no PDF?
Ter um serviço de conversão (completo, mas ainda restrito) na nuvem pode fazer sentido e já foi mencionado há algum tempo. Isso seria uma "api nbviewer". No entanto, levanta questões jurídicas problemáticas de responsabilidade em caso de vazamento de dados do usuário, hack ou outras coisas que (ainda) não estamos prontos para resolver.

Porém, escrever o código para que a empresa pudesse implantá-lo em sua rede local seria ótimo.

Bem, a conversão de PDF requer um grande download (embora a maior parte de seu tamanho seja documentação) e não é provável que todo usuário Ipython tenha esse pacote instalado. Portanto, pensei que reduzir o esforço para começar a usar esse recurso seria uma boa adição. Que outras conversões você tem em mente?

Na verdade, eu não ficaria muito feliz em obter um serviço de conversão completo porque tal projeto requer muito esforço que prejudicaria o aprimoramento do notebook e a lei dos retornos decrescentes se aplica rapidamente nesse caso.

Com relação ao vazamento de dados do usuário, achei que a única coisa necessária para que isso funcione é o arquivo pynb. Que tipo de informação do usuário é necessária para a conversão? Em qualquer caso, um servidor que fornece PDFs não deve salvar as informações do usuário.

Os dados do usuário incluem o próprio conteúdo do notebook. E embora o servidor não deva salvar essas informações, você não sabe ao enviar uma solicitação HTTP o que fará com ela.

Por enquanto, não tenho problema em dizer que você precisa do Latex instalado para converter cadernos em PDFs. Dependências não são algo que precisamos evitar.

Por enquanto, não tenho problema em dizer que você precisa do Latex instalado para converter cadernos em PDFs. Dependências não são algo que precisamos evitar.

Eu concordo com @takluyver , talvez algo mais elaborado possa ser desenvolvido mais tarde, mas por agora, estou bem em apenas pedir às pessoas que instalem o Latex se quiserem usar esses recursos ...

O erro de látex apareceu no terminal. Na página de erro HTML, a única mensagem que recebi foi falha nbconvert: Falha ao criar PDF. Que tal adicionar o traceback à página de erro HTML?

Isso me parece uma boa ideia, o que todo mundo pensa sobre isso?

Isso me parece uma boa ideia, o que todo mundo pensa sobre isso?

Parece bom para mim...

Que tal adicionar o traceback à página de erro HTML?

Isso pode fazer sentido, embora os erros de LaTeX sejam alguns dos erros mais longos e menos informativos que existem. Precisamos ter certeza de que manipulamos corretamente 1000 linhas de saída de erro, quando geralmente no máximo uma dessas linhas contém qualquer informação significativa.

Que outras conversões você tem em mente

Tudo. Se podemos PDF, por que não HTML, RST, markdown e até mesmo apenas Latex.
Instalar o Pandoc não é fácil ...

Com relação ao vazamento de dados do usuário, achei que a única coisa necessária para que isso funcione é o arquivo pynb. Que tipo de informação do usuário é necessária para a conversão? Em qualquer caso, um servidor que fornece PDFs não deve salvar as informações do usuário.

Se você tiver arquivos colaterais, como imagens vinculadas, talvez seja necessário carregá-los também.
Mesmo se o servidor não é suposto que mantém as coisas, se nós hackeado, talvez,
ou pode até fornecer um PDF infectado.

É difícil imaginar o que pode ser feito com os dados (ou falta deles), veja [este exemplo]) http://mashable.com/2015/01/28/redditor-muslim-cab-drivers/) onde o padrão de dados ausentes permitiram adivinhar a religião do motorista de táxi de NY.

Embora concordemos que o serviço seria bom, provavelmente não o habilitaremos por padrão.
Também precisamos do desenvolvedor e do tempo de desenvolvimento para manter o serviço online + sendo legalmente protegido,
então, a menos que alguém venha e faça isso, ou obtenhamos financiamento para isso, há apenas uma pequena chance de que aconteça.

Para a mensagem de erro, faria sentido.

Concordo que, por enquanto, é melhor descrever as dependências e melhorar a mensagem de erro.

É possível detectar se o LaTeX está instalado antes de tentar converter o arquivo ipynb? Se isso for possível, o Ipython poderá fornecer uma mensagem de erro útil em vez de lançar um erro sobre um arquivo muito específico. No meu caso, pensei que outro pacote tinha instalado uma distribuição LaTeX porque pdflatex parecia funcionar. Suponho que a maioria dos erros que os usuários do Ipython encontram, neste contexto, são devido a não ter instalado uma distribuição LaTeX. Portanto, uma detecção precoce desse problema beneficiaria a maioria dos usuários.

Talvez, um compromisso razoável seja adicionar o traceback à página de erro HTML, mas não mostrá-lo por padrão (porque é muito longo e não informativo). Depois de clicar em algum texto como "Quer ver o traceback?", O traceback poderia ser mostrado. No entanto, se a detecção precoce de uma dependência ausente for possível, a mensagem principal na página de erro deve transmitir isso.

@takluyver

Os dados do usuário incluem o próprio conteúdo do notebook. E embora o servidor não deva salvar essas informações, você não sabe ao enviar uma solicitação HTTP o que fará com ela.

Mas você quer dizer bisbilhotar como @Carreau sugeriu? Caso contrário, sabemos o que o servidor fará com essa solicitação.

@Carreau

Tudo. Se podemos PDF, por que não HTML, RST, markdown e até mesmo apenas Latex.
Instalar o Pandoc não é fácil ...

Não acho que HTML ou RST sejam necessários em um serviço de conversão porque eles já estão disponíveis no próprio notebook. No entanto, as conversões Markdown e LaTeX podem ser úteis.

Se o servidor for hackeado, tudo é possível. No entanto, a probabilidade de ser hackeado é baixa o suficiente para que não seja algo que impeça as pessoas de lançar um serviço. Em vez disso, medidas de segurança devem ser tomadas (instalando prontamente as atualizações de segurança, abrindo apenas as portas que são necessárias, habilitando um firewall, instalando apenas os aplicativos necessários, SSL, etc)

Acho que já verificamos se o comando pdflatex está disponível. Duvido que haja uma boa maneira de verificar se todos os arquivos que precisarão processar o Latex estão presentes, além de executá-lo.

Duvido que haja uma boa maneira de verificar se todos os arquivos que precisarão processar o Latex estão presentes, além de executá-lo.

Eu concordo com essa dúvida.

Não acho que HTML ou RST sejam necessários em um serviço de conversão porque eles já estão disponíveis no próprio notebook. No entanto, as conversões Markdown e LaTeX podem ser úteis.

Não subestime as coisas que o nbconvert / nbviewer faz :-) se você tiver SVG, ele pode até $ inkscape de SVG para PNG. Você apenas não atingiu isso ainda.

Se o servidor for hackeado, tudo é possível. No entanto, a probabilidade de ser hackeado é baixa o suficiente para que não seja algo que impeça as pessoas de lançar um serviço. Em vez disso, medidas de segurança devem ser tomadas (instalando prontamente as atualizações de segurança, abrindo apenas as portas que são necessárias, habilitando um firewall, instalando apenas os aplicativos necessários, SSL, etc)

Isso é muito trabalhoso e não subestime o excelente firewall e a NSA.
Mas de qualquer forma, existem muitos laboratórios onde ter conexão remota com serviços de internet está fora de questão
também, mas acho que você subestima a quantidade de trabalho em "etc" e a "probabilidade de ser hackeado".

Se pessoas como, digamos Peter Norvig, são conhecidas por usar notebooks e, potencialmente, usar o serviço, ele será, com 100% de chance, o alvo de ataques.

Em distribuições Debian, isso funciona:

 ➜  ~  dpkg -s sudo | grep "install ok installed"
 Status: install ok installed
 ➜  ~  dpkg -s texlive | grep "install ok installed"
 Status: install ok installed
 ➜  ~  dpkg -s texlive-latex-extra | grep "install ok installed"

Desinstalei texlive-latex-extra antes de executar o último comando. Não tenho a menor idéia sobre o Windows, no entanto.

@Carreau Não, eu quis dizer que nbconvert já faz muitas conversões úteis, então não precisamos de um serviço de conversão implementando o mesmo novamente.

Em relação às questões de segurança, isso dá muito trabalho, mas é quase um trabalho mecânico. Contra as agências de inteligência, não há nada que você possa fazer. A NSA interrompe conexões criptografadas com SSL rotineiramente agora. A quantidade de trabalho em "etc" depende dos requisitos particulares do site, mas neste caso, devido à simplicidade do serviço, as necessidades adicionais não são muito exigentes.

O Google é alvo de espionagem industrial regularmente e, se alguma agência de inteligência estrangeira quiser roubar informações, há quase 0% de chance de que o vetor de ataque escolhido seja um serviço ipynb-> pdf. Eles sabem que pessoas com experiência em tecnologia não farão upload de informações confidenciais de maneira tão descuidada. Além disso, se eles quisessem obter os dados de Norvig, eles infectariam seu laptop e todas as medidas de segurança adicionais seriam inúteis.

Tenho latex e pdflatex instalados, mas no RHEL 6 e 7 é sempre adjustbox.sty que a conversão tropeça. TEM que ser este arquivo de estilo que parece não ser o padrão?

A exportação de PDF é extremamente difícil no Windows 7 (ou em qualquer Windows).

Este é o processo:

  1. Mistune ausente - a instalação do pip está quebrada, mas felizmente a instalação do conda tornou-se disponível hoje.
  2. Pandoc ausente. Nem um pouco disponível no pip ou conda, então pesquise na web por um instalador do Windows de 18 MB.
  3. Pdflatex ausente. Onde se consegue isso para o Windows? Existe algo chamado MiKTeX que é uma instalação de 163 MB e não está claro se fará essa exportação de PDF.

Até agora, são 1 instalação e desinstalação de pip quebradas, 1 instalação conda bem-sucedida e 2 downloads massivos de terceiros aleatórios antes de chegarmos perto.

Só não sei como alguém poderia manter isso em uma carga de máquinas de usuários, e isso é apenas para gerar um arquivo como PDF. Muitos outros pacotes de software gerenciam a exportação de PDF sem nenhuma dependência.
Não existe uma maneira melhor?

@blokeley Espero que você tenha
Se você tiver uma maneira melhor de funcionar, isso seria ótimo.

Acho que podemos consertar isso de duas maneiras:

  1. Tente verificar se o látex e suas dependências estão instalados.
  2. Escreva um modelo e exportador de PDF, que produza diretamente em PDF.

Acho que (2) é realmente mais fácil do que (1). Não sei se este é o tipo de coisa que a equipe está interessada em alocar mão de obra ... Eu tive um modelo de PDF direto funcionando no passado, embora fosse muito básico.

Acho que existem apenas duas maneiras razoáveis ​​de fazermos a exportação de PDF:

  • HTML via visualização de impressão do navegador -> imprimir em pdf
  • Látex

Se alguém quiser escrever outro exportador de PDF usando ferramentas diferentes, seria bem-vindo como um exportador terceirizado personalizado, mas provavelmente não como um novo exportador enviado com o próprio nbconvert.

Talvez algo tão simples como renomear de "PDF" para "Latex PDF" e uma mensagem de erro mais detalhada sejam suficientes. No momento, a mensagem HTML é "500: Erro interno do servidor" sem nada indicando que é um problema de dependência (exceto no console do servidor, ao qual o usuário pode não ter acesso).

Talvez algo tão simples como mudar o nome de "PDF" para "Latex PDF"

já feito em # 7951

A mensagem de erro ainda deve ser melhorada, no entanto.

Eu adoraria escrever o exportador de PDF, mas meu tempo é um pouco limitado (não vou te aborrecer com as desculpas). Se nada mais acontecer, tentarei escrever um protótipo neste verão.

Ou, de forma mais realista, este poderia ser um projeto do Google Summer of Code? Eu ficaria feliz em doar um pouco de dinheiro.

IPython não faz GSoC - Fernando acredita que não vale a pena ser mentor de pessoas.

Estou tendo problemas semelhantes como blokely para o Windows 7.
Estou protegido por um firewall no meu trabalho e preciso obter permissão especial para instalar o software. Alguns de meus colegas e eu estamos testando a distribuição Anaconda. esperávamos que fosse a única coisa que teríamos de instalar.
Acho que precisamos de um total de 3 addons, mathjax, pandoc, (esses dois estão documentados nas instruções de instalação detalhadas) e um terceiro MiKTeX que não está nas instruções de instalação. você não descobre isso até ir para a página pandoc. fazer com que o notebook e o nbconvert funcionem perfeitamente no windows atrás de um firewall não é fácil!

Alguém poderia escrever um exportador de PDF nbconvert que vai diretamente para PDF usando reportlab (que agora pode ser instalado no Windows) ou produz HTML e depois converte para PDF usando uma ferramenta como wkhtmltopdf ou weasyprint . Se tudo correr bem, podemos até incluí-lo no nbconvert. Mas não acho que seja uma prioridade alta o suficiente para que possamos trabalhar nisso tão cedo.

@ drafter250 você também pode precisar do Inkscape se quiser usar gráficos matplotlib vetorizados (svg) convertidos para pdf.
@takluyver Eu também dei uma olhada rápida no reportlab, mas temo que organizar o layout, especialmente na presença de equação, será bem complicado. Isso é uma grande vantagem do LaTeX.

Certamente, existem muitas dependências aqui. Para nbconvert. Látex, esfinge, jinja, miktex, inkscape. etc estou tendo dificuldade em manter tudo isso em linha reta. Há algum recurso disponível para descrever como todos esses se relacionam para fornecer funcionalidade completa ao nbconvert. Também pode ser melhor desativar vários comandos para os quais as dependências não puderam ser resolvidas

Por enquanto, não tenho problema em dizer que você precisa do Latex instalado para converter cadernos em PDFs. Dependências não são algo que precisamos evitar.

O problema é que atualmente todas (a maioria?) Das distribuições RHEL-ish estão bloqueadas para conversão. O código de látex gerado depende de adjustbox.sty e não há pacote disponível que forneça esse arquivo (afeta: RHEL6, RHEL7, EPEL6, EPEL7, científico e supostamente CentOS também)

Esta parece ser a solicitação de pull ofensiva em relação ao erro original de OPs:

  • # 3578 Use a caixa de ajuste para especificar o tamanho da figura em nbconvert -> látex
    490

Pode ser interessante experimentar o jsPDF .

@serverhorror já existe um relatório de bug para o Adjustbox. Portanto, esperançosamente, haverá uma solução em breve.
Alternativamente, não deve ser muito difícil instalar o Adjustbox.sty localmente, veja os comentários aqui

@jakobgager eu vi isso. Infelizmente RHEL7 (EPEL7) nem está no roteiro ainda (waaaaayyyy além do meu controle).

Por enquanto, vou apenas usar uma versão com patch local que basicamente reverte # 3578

+1

Se você usar (no ubuntu 15.04):

apt-get install --no-install-recommends texlive-latex-extra texlive-fonts-recommended

Você diminui o tamanho do download para 24 MB (em vez de 606 MB). Ele não baixa alguma documentação (cerca de 300 MB)

Obrigado por concordar com isso, todos, estou examinando e corrigindo antigos problemas que foram resolvidos, e este está pronto para ser encerrado.

Houve muita discussão boa acontecendo nesta questão, mas para resumir:

1. Uma mensagem mais detalhada agora é exibida quando a conversão falha. No notebook versão 4.2.2, remover o arquivo .sty em questão em minha máquina produz uma mensagem de erro semelhante a esta:

screen shot 2016-10-27 at 11 57 41 am

2. não pretendemos fornecer a conversão de cadernos para PDF como um serviço da web
3. se um terceiro tornar esse serviço da web disponível, o download do notebook integrado foi explícito sobre o uso do LaTeX desde # 7951 - e tem a seguinte aparência:

screen shot 2016-10-27 at 12 01 12 pm

4. Quanto ao tamanho das dependências necessárias, uma solução alternativa foi proposta por @iuridiniz logo acima deste comentário.

Qualquer discussão futura sobre esses e outros problemas relacionados provavelmente deve ocorrer em https://github.com/jupyter/nbconvert .

Feliz hacking! :gravata-borboleta:

Esta página foi útil?
0 / 5 - 0 avaliações