Ipython: La función "Descargar como PDF" muestra un mensaje de error inútil y requiere una gran dependencia

Creado en 8 feb. 2015  ·  40Comentarios  ·  Fuente: ipython/ipython

Esta es más una solicitud de función porque probé la función "descargar como PDF" en Ubuntu 14.10 usando el nuevo portátil (Ipython 3) y funciona muy bien. El problema es que cuando lo probé por primera vez, no tenía las dependencias requeridas y recibí un error que decía ! LaTeX Error: File 'adjustbox.sty' not found . Traté de evitar este problema instalando solo adjustbox.sty pero finalmente tuve que instalar texlive-latex-extra .

El problema es que esto requiere una instalación de, al menos, 584 MB. Esa es una gran dependencia para una característica muy específica. Entonces, hay un par de sugerencias:

  1. Muestre un mensaje de error más sencillo cuando una dependencia como Adjustbox no se encuentre en la página de error 500 del portátil. Actualmente, el error dice: nbconvert failed: PDF creating failed
  2. A largo plazo, sería genial convertir a PDF utilizando un servicio web de la misma manera que Google Drive al descargar un PDF de un documento.
nbconvert

Comentario más útil

Gracias por participar en esto, a todos, estoy revisando y limpiando viejos problemas que se han abordado, y este está listo para ser cerrado.

Hubo un buen debate sobre este tema, pero para resumir:

1. Ahora se muestra un mensaje más detallado cuando falla la conversión. En la versión 4.2.2 del cuaderno, eliminar el archivo .sty en cuestión en mi máquina produce un mensaje de error que se ve así:

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

2. no tenemos la intención de proporcionar conversión de cuadernos a PDF como un servicio web
3. si un tercero hace que un servicio web de este tipo esté disponible, la descarga de la libreta incorporada ha sido explícita sobre el uso de LaTeX desde el # 7951, y se ve así:

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

4. En cuanto al tamaño de las dependencias requeridas, @iuridiniz ha propuesto una solución justo encima de este comentario.

Cualquier discusión futura sobre estos y otros problemas relacionados probablemente debería tener lugar en https://github.com/jupyter/nbconvert .

¡Feliz piratería! :corbata de moño:

Todos 40 comentarios

¿Se mostró el error de látex en la página de error HTML o solo en la terminal?
Siempre que el mensaje de error específico llegue a la página de error, creo
eso es todo lo que podemos hacer. No vamos a intentar analizar por qué falló el látex, estoy
Seguro que hay muchas formas posibles.

Sería interesante investigar formas alternativas de producir un PDF,
como usar reportlab o wkhtmltopdf. Definitivamente no deberíamos estar gritando
a un servicio web de forma predeterminada.

El error de látex se mostró en el terminal. En la página de error HTML, el único mensaje que recibí fue nbconvert failed: PDF creating failed . ¿Qué hay de agregar el rastreo a la página de error HTML?

Olvidé mencionar que la idea de usar un servicio web estaba destinada a ser una alternativa cuando ocurre un error en la instalación local. ¿No debería ser bastante sencillo crear un servidor que reciba solicitudes para convertir archivos ipynb de manera similar a lo que hace nbviewer?

Los servicios web como nbviewer son personas optativas que hacen público explícitamente su trabajo y en Internet.
Tener un servicio web para PDF de forma predeterminada sería realmente malo para la privacidad y haría que el cuaderno no se pudiera usar en línea.

El único servicio que hace eso por ahora es matjax, porque era demasiado grande. Y para 4.0 lo enviaremos como parte de IPython.

@Carreau No estoy diciendo que el PDF se publicaría en línea públicamente, sino que se convertiría en un servidor administrado por Ipython y se entregaría como descarga para el usuario como respaldo en caso de que no haya una instalación adecuada en la máquina local.

Está muy mal visto en el mundo del código abierto tener un software que envíe automáticamente sus datos a un servidor cuando no le ha pedido explícitamente que lo haga. Posiblemente podríamos hacer algo así como una opción explícita 'convertir a PDF en los servidores de IPython', pero no lo haríamos como alternativa cuando la conversión local fallara.

Sí, tienes razón, sería mejor. Tal vez un mensaje que dice que algo salió mal con la conversión y un botón adicional para descargar el archivo usando un servicio web externo.

Creo que podría ser factible, pero en este caso, ¿por qué detenerse en PDF?
Tener un servicio de conversión (completo, pero aún restringido) en la nube podría tener sentido y ya no se ha mencionado varias veces. Eso sería una "api nbviewer". Sin embargo, plantea una cuestión legal problemática de responsabilidad en caso de fuga de datos del usuario, piratería u otras cosas que (todavía) no estamos listos para abordar.

Sin embargo, escribir el código para que la empresa pueda implementarlo en su red local estaría bien.

Bueno, la conversión de PDF requiere una gran descarga (aunque la mayor parte de su tamaño es documentación) y no es probable que todos los usuarios de Ipython tengan ese paquete instalado. Por lo tanto, pensé que reducir el esfuerzo para comenzar a usar esa función sería una buena adición. ¿Qué otras conversiones tienes en mente?

En realidad, no estaría muy contento de obtener un servicio de conversión completo porque un proyecto de este tipo requiere mucho esfuerzo que restaría valor a la mejora del portátil y la ley de los rendimientos decrecientes se aplica rápidamente en ese caso.

Con respecto a las fugas de datos del usuario, pensé que lo único necesario para que esto funcione es el archivo pynb. ¿Qué tipo de información de usuario se necesita para la conversión? En cualquier caso, no se supone que un servidor que proporcione archivos PDF guarde la información del usuario.

Los datos del usuario incluyen el contenido del cuaderno en sí. Y aunque se supone que el servidor no debe guardar esa información, cuando le envía una solicitud HTTP no sabe qué va a hacer con ella.

Por el momento, no tengo ningún problema en decir que necesita Latex instalado para convertir cuadernos a PDF. Las dependencias no son algo que debamos evitar.

Por el momento, no tengo ningún problema en decir que necesita Latex instalado para convertir cuadernos a PDF. Las dependencias no son algo que debamos evitar.

Estoy de acuerdo con @takluyver , tal vez se pueda desarrollar algo más elaborado más adelante, pero por ahora, estoy bien con solo pedirle a la gente que instale Latex si quieren usar estas funciones ...

El error de látex se mostró en el terminal. En la página de error HTML, el único mensaje que recibí fue nbconvert failed: Falló la creación de PDF. ¿Qué hay de agregar el rastreo a la página de error HTML?

Esto me parece una buena idea, ¿qué piensan los demás sobre esto?

Esto me parece una buena idea, ¿qué piensan los demás sobre esto?

Suena bien para mí...

¿Qué hay de agregar el rastreo a la página de error HTML?

Esto puede tener sentido, aunque los errores de LaTeX son algunos de los errores más largos y menos informativos que existen. Necesitaríamos asegurarnos de que manejamos adecuadamente miles de líneas de salida de error, cuando por lo general, como máximo, una de esas líneas contiene información significativa.

¿Qué otras conversiones tienes en mente?

Todo. Si podemos PDF, ¿por qué no HTML, RST, Markdown e incluso Just Latex?
Instalar Pandoc no es fácil ...

Con respecto a las fugas de datos del usuario, pensé que lo único necesario para que esto funcione es el archivo pynb. ¿Qué tipo de información de usuario se necesita para la conversión? En cualquier caso, no se supone que un servidor que proporcione archivos PDF guarde la información del usuario.

Si tiene archivos secundarios, como imágenes vinculadas, es posible que también deba cargarlos.
Incluso si se supone que el servidor no guarda las cosas, si nos piratean, podría,
o incluso podría darte un PDF infectado.

Es difícil imaginar qué se puede hacer con los datos (o la falta de ellos), vea [este ejemplo]) http://mashable.com/2015/01/28/redditor-muslim-cab-drivers/) donde el patrón de Los datos faltantes permitieron adivinar la religión del taxista de Nueva York.

Si bien estamos de acuerdo en que el servicio sería bueno, probablemente no lo habilitaremos de forma predeterminada.
También necesitamos tiempo de desarrollo y operaciones de desarrollo para mantener el servicio en línea + estar protegido legalmente,
así que a menos que alguien venga y lo haga, o que obtengamos fondos para eso, hay una pequeña posibilidad de que suceda.

Para el mensaje de error tendría sentido.

Estoy de acuerdo en que, por el momento, es mejor describir las dependencias y mejorar el mensaje de error.

¿Es posible detectar si LaTeX está instalado antes de intentar convertir el archivo ipynb? Si eso es posible, Ipython podría dar un mensaje de error útil en lugar de lanzar un error sobre un archivo muy específico. En mi caso, pensé que otro paquete había instalado una distribución LaTeX porque pdflatex parecía funcionar. Supongo que la mayoría de los errores que encuentran los usuarios de Ipython, en este contexto, se deben a no haber instalado una distribución LaTeX. Por lo tanto, una detección temprana de este problema beneficiaría a la mayoría de los usuarios.

Tal vez, un compromiso razonable es agregar el rastreo a la página de error HTML pero no mostrarlo de forma predeterminada (porque es demasiado largo y poco informativo). Después de hacer clic en un texto como "¿Desea ver el rastreo?", El rastreo podría ser mostrado. Sin embargo, si es posible la detección temprana de una dependencia faltante, el mensaje principal en la página de error debería transmitirlo.

@takluyver

Los datos del usuario incluyen el contenido del cuaderno en sí. Y aunque se supone que el servidor no debe guardar esa información, cuando le envía una solicitud HTTP no sabe qué va a hacer con ella.

¿Pero te refieres a espiar como sugirió

@Carreau

Todo. Si podemos PDF, ¿por qué no HTML, RST, Markdown e incluso Just Latex?
Instalar Pandoc no es fácil ...

No creo que HTML o RST sean necesarios en un servicio de conversión porque ya están disponibles en el propio cuaderno. Sin embargo, las conversiones de Markdown y LaTeX pueden ser útiles.

Si el servidor es pirateado, todo es posible. Sin embargo, la probabilidad de ser pirateado es lo suficientemente baja como para que no sea algo que impida que las personas lancen un servicio. En su lugar, se deben tomar medidas de seguridad (instalar rápidamente actualizaciones de seguridad, abrir solo los puertos necesarios, habilitar un firewall, instalar solo las aplicaciones necesarias, SSL, etc.)

Creo que ya comprobamos si el comando pdflatex está disponible. Dudo que haya una buena manera de verificar si todos los archivos que necesitarán procesar el Latex están presentes, además de ejecutarlo.

Dudo que haya una buena manera de verificar si todos los archivos que necesitarán procesar el Latex están presentes, además de ejecutarlo.

Apoyo esta duda.

No creo que HTML o RST sean necesarios en un servicio de conversión porque ya están disponibles en el propio cuaderno. Sin embargo, las conversiones de Markdown y LaTeX pueden ser útiles.

No subestime las cosas que hace nbconvert / nbviewer :-) si tiene SVG, puede incluso $ inkscape de SVG a PNG. Simplemente no lo has acertado todavía.

Si el servidor es pirateado, todo es posible. Sin embargo, la probabilidad de ser pirateado es lo suficientemente baja como para que no sea algo que impida que las personas lancen un servicio. En su lugar, se deben tomar medidas de seguridad (instalar rápidamente actualizaciones de seguridad, abrir solo los puertos necesarios, habilitar un firewall, instalar solo las aplicaciones necesarias, SSL, etc.)

Eso es mucho trabajo y no subestime el gran firewall y la NSA.
Pero de todos modos, hay muchos laboratorios donde tener conexión remota a servicios de Internet está fuera de discusión.
también, pero creo que subestimas mucho la cantidad de trabajo en "etc" y la "probabilidad de ser pirateado".

Si a la gente le gusta, digamos que Peter Norvig, es conocido por usar portátiles y luego potencialmente usa el servicio, entonces tendrá un 100% de posibilidades de ser el objetivo de los ataques.

En las distribuciones de Debian esto 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"

Desinstalé texlive-latex-extra antes de ejecutar el último comando. Sin embargo, no tengo la menor idea de Windows.

@Carreau No, quise decir que nbconvert ya realiza muchas conversiones útiles, por lo que no necesitamos un servicio de conversión que implemente lo mismo nuevamente.

En lo que respecta a la seguridad, es mucho trabajo, pero es casi un trabajo mecánico. Contra las agencias de inteligencia, no hay nada que puedas hacer. La NSA rompe las conexiones cifradas con SSL de forma rutinaria ahora. La cantidad de trabajo en "etc" depende de los requisitos particulares del sitio, pero en este caso, debido a la simplicidad del servicio, las necesidades adicionales no son demasiado exigentes.

Google es objetivo de espionaje industrial de forma regular, y si alguna agencia de inteligencia extranjera quisiera robar información, hay casi un 0% de posibilidades de que el vector de ataque elegido sea un servicio ipynb-> pdf. Saben que las personas con conocimientos tecnológicos no subirán información confidencial de manera tan descuidada. Además, si quisieran obtener los datos de Norvig, infectarían su computadora portátil y todas las medidas de seguridad adicionales serían inútiles.

Tengo instalados latex y pdflatex, pero en RHEL 6 y 7 siempre es adjustbox.sty que se tropieza la conversión. ¿TIENE que ser este archivo de estilo el que parece no ser el predeterminado?

La exportación de PDF es desesperadamente difícil en Windows 7 (o cualquier Windows para el caso).

Este es el proceso:

  1. Missing mistune: la instalación de pip está rota, pero afortunadamente la instalación de conda estuvo disponible hoy.
  2. Falta pandoc. No está disponible en absoluto en pip o conda, así que busque en la web un instalador de Windows de 18 MB.
  3. Falta pdflatex. ¿Dónde se consigue esto para Windows? Hay algo llamado MiKTeX que es una instalación de 163 MB, y no está claro si hará esta exportación a PDF.

Hasta ahora, eso es 1 instalación y desinstalación de pip rota, 1 instalación exitosa de conda y 2 descargas masivas de terceros al azar antes de acercarnos.

Simplemente no sé cómo alguien podría mantener esto en una gran cantidad de máquinas de usuarios, y esto es solo para generar un archivo como PDF. Muchos otros paquetes de software gestionan la exportación de PDF sin dependencias.
¿No hay una forma mejor?

@blokeley Con suerte, lidiar con eso solo una vez. Tenemos que lidiar con eso casi todas las semanas.
Si tiene una forma mejor que funcione, entonces sería genial.

Creo que podríamos solucionar esto de dos maneras:

  1. Intente verificar que latex y sus dependencias estén instalados.
  2. Escriba una plantilla de PDF y un exportador, que se traduce en PDF directamente.

Creo que (2) es en realidad más fácil que (1). Sin embargo, no sé si este es el tipo de cosas para las que el equipo está interesado en asignar mano de obra ... He tenido una plantilla PDF directa funcionando en el pasado, aunque era muy básica.

Creo que solo hay dos formas razonables de exportar PDF:

  • HTML a través de la vista previa de impresión del navegador -> imprimir a PDF
  • Látex

Si alguien quiere escribir otro exportador de PDF usando diferentes herramientas, sería bienvenido como un exportador externo personalizado, pero probablemente no como un nuevo exportador enviado con nbconvert.

Tal vez sea suficiente algo tan simple como cambiar el nombre de "PDF" a "Latex PDF" y un mensaje de error más detallado. En este momento, el mensaje HTML es "500: Error interno del servidor" y nada indica que se trate de un problema de dependencia (excepto en la consola del servidor, a la que el usuario puede no tener acceso).

Tal vez algo tan simple como cambiar el nombre de "PDF" a "Latex PDF"

ya hecho en # 7951

Sin embargo, el mensaje de error aún debería mejorarse.

Me encantaría escribir el exportador de PDF pero mi tiempo es algo limitado (no los aburriré con las excusas). Si no sucede nada más, intentaré escribir un prototipo en algún momento de este verano.

¿O de manera más realista, podría ser este un proyecto de Google Summer of Code? Estaría feliz de donar un poco de dinero en efectivo.

IPython no hace GSoC - Fernando está convencido de que no vale la pena dedicar nuestro tiempo a asesorar a las personas.

Estoy teniendo problemas similares en bloque para Windows 7.
Estoy detrás de un firewall en mi trabajo y necesito obtener un permiso especial para instalar software. Varios de mis colegas y yo estamos probando la distribución de Anaconda. esperábamos que fuera lo único que tendríamos que instalar.
Supongo que necesitamos un total de 3 complementos, mathjax, pandoc, (estos dos están documentados en las instrucciones de instalación detalladas) y un tercer MiKTeX que no está en las instrucciones de instalación. no lo averigua hasta que accede a la página de pandoc. ¡Conseguir que el portátil y nbconvert funcionen perfectamente en Windows detrás de un cortafuegos no es fácil!

Alguien podría escribir un exportador de PDF nbconvert que vaya directamente a PDF usando reportlab (que ahora es pip instalable en Windows), o produzca HTML y luego lo convierta a PDF usando una herramienta como wkhtmltopdf o weasyprint . Si salió lo suficientemente bien, incluso podemos incluirlo en nbconvert. Pero no creo que sea una prioridad lo suficientemente alta como para que vayamos a trabajar en ello nosotros mismos en el corto plazo.

@ drafter250 es posible que también necesite Inkscape si desea utilizar gráficos vectorizados matplotlib (svg) convertidos a pdf.
@takluyver También eché un vistazo rápido a reportlab, pero me temo que organizar el diseño, especialmente en presencia de la ecuación, será bastante complicado. Eso es una gran ventaja de LaTeX.

Ciertamente, hay muchas dependencias aquí. Para nbconvert. Látex, esfinge, jinja, miktex, inkscape. etc. Estoy teniendo dificultades para mantener todo esto en orden. ¿Hay algún recurso para describir cómo todos estos se interrelacionan para dar a nbconvert una funcionalidad completa? También tal vez sería mejor deshabilitar varios comandos para los que no se pudieron resolver las dependencias

Por el momento, no tengo ningún problema en decir que necesita Latex instalado para convertir cuadernos a PDF. Las dependencias no son algo que debamos evitar.

El problema es que actualmente todas (¿la mayoría?) De las distribuciones RHEL-ish están bloqueadas para la conversión. El código de látex generado se basa en adjustbox.sty y no hay ningún paquete disponible que proporcione ese archivo (afecta a: RHEL6, RHEL7, EPEL6, EPEL7, Scientific y supuestamente también CentOS)

Esta parece ser la solicitud de extracción ofensiva con respecto al error original de OP:

  • # 3578 Use Adjustbox para especificar el tamaño de la figura en nbconvert -> latex
    490

Puede ser interesante experimentar con jsPDF .

@serverhorror ya existe un informe de error para adjustbox. Así que espero que pronto haya una solución.
Alternativamente, no debería ser difícil de instalar localmente Adjustbox.sty, vea los comentarios aquí.

@jakobgager Lo he visto. Desafortunadamente, RHEL7 (EPEL7) ni siquiera está en la hoja de ruta todavía (waaaaayyyy más allá de mi control).

Por el momento, solo usaré una versión parcheada localmente que básicamente revierte # 3578

+1

Si usa (en ubuntu 15.04):

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

Disminuye el tamaño de la descarga a 24 MB (en lugar de 606 MB). No descarga alguna documentación (unos 300 MB)

Gracias por participar en esto, a todos, estoy revisando y limpiando viejos problemas que se han abordado, y este está listo para ser cerrado.

Hubo un buen debate sobre este tema, pero para resumir:

1. Ahora se muestra un mensaje más detallado cuando falla la conversión. En la versión 4.2.2 del cuaderno, eliminar el archivo .sty en cuestión en mi máquina produce un mensaje de error que se ve así:

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

2. no tenemos la intención de proporcionar conversión de cuadernos a PDF como un servicio web
3. si un tercero hace que un servicio web de este tipo esté disponible, la descarga de la libreta incorporada ha sido explícita sobre el uso de LaTeX desde el # 7951, y se ve así:

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

4. En cuanto al tamaño de las dependencias requeridas, @iuridiniz ha propuesto una solución justo encima de este comentario.

Cualquier discusión futura sobre estos y otros problemas relacionados probablemente debería tener lugar en https://github.com/jupyter/nbconvert .

¡Feliz piratería! :corbata de moño:

¿Fue útil esta página
0 / 5 - 0 calificaciones