Problemas de IPython / Jupyter al guardar el cuaderno como PDF

86

Entonces, he estado tratando de guardar un cuaderno jupyter como PDF, pero no puedo entender cómo hacerlo. Lo primero que intento es desde el menú de archivo, simplemente descargarlo como PDF, pero hacerlo da como resultado:

nbconvert failed: PDF creating failed

lo siguiente que intento es intentar hacer la conversión desde el símbolo del sistema de esta manera

$ ipython nbconvert --to latex --post PDF MyNotebook.ipynb 

pero nuevamente, esto resulta en un mensaje de error

ImportError: No module named 'PDF'

y si lo intento

$ ipython nbconvert --to latex MyNotebook.ipynb 

esto resulta en

IPython.nbconvert.utils.pandoc.PandocMissing: Pandoc wasn't found:
Please check that pandoc is installed

si intento instalar pandoc ( pip install pandoc), esto me da

ImportError: No module named 'ConfigParser'

y aquí es donde me quedo atascado porque no sé qué más hacer. ¿Alguien tiene idea de cómo arreglar lo que está mal?

Isak Baizley
fuente
2
la creación de pdf requiere dependencias no pitónicas (es decir, pandocy latex)
cel
4
Eso significa que debe instalarlos antes de poder utilizar esta función. Y no son paquetes de Python, por lo que no puede usar pip.
cel
1
pandoc está escrito en Haskell.
Thomas K

Respuestas:

33

Para que funcione, instalé látex, el típico látex extra y pandoc.

Con ubuntu:

sudo apt-get install texlive texlive-latex-extra pandoc

Tarda algunas veces: varios 100 Mb para descargar. Leí en alguna parte que puedes usar --no-install-recommendspara texlive y extra para reducir al dl.

Juh_
fuente
8
El mío requiere pandocy texlive-xetex.
douggard
Encontré una lista más pequeña de paquetes en ask_ubuntu .
Eric Duminil
1
También necesitaba texlive-generic-extraresolver este problema , aparte de lo texlive-xetexque sugirió @douggard.
pgmank
Muchas gracias que fue de gran ayuda :)
farnaz jazayeri
30

Si está en una Mac y tiene Homebrew instalado, abra una terminal e instale pandoc escribiendo el comando:

brew install pandoc

tenga paciencia, el tiempo de instalación y compilación puede llevar un tiempo con conexiones lentas a Internet o sistemas más antiguos.

Andrea
fuente
3
Esto funcionó en OS X 10.10. Ahora puedo convertir a LaTeX y PDF. (Mi instalación en pandoc tomó menos de un minuto ... debo haber tenido la mayoría de los componentes ya en mi sistema.) ¡GRACIAS!
drpetermolnar
1
@drpetermolnar Esto también funcionó para mí (OSX 10.11.6). Tomó 2 minutos.
timothyjgraham
1
@Akshay, el comando es: ipython nbconvert --to PDF <su cuaderno> .ipynb
Andrea
@AndreaNalon El comando mencionado anteriormente no funciona, stackoverflow.com/questions/43247818/…
Akshay Khale
Para OSX 10.13.06 tuve que hacer: brew install pandocy brew cask install mactex-no-gui.
bue
12

2015-4-22: Parece que una actualización de IPython significa que --to pdfdebería usarse en lugar de --to latex --post PDF. Hay un problema relacionado con Github .

Scott
fuente
10

Para convertir cuadernos a PDF, primero debe tener nbconvert instalado.

pip install nbconvert
# OR
conda install nbconvert

A continuación, si no está usando Anaconda o aún no lo ha hecho, debe instalar pandoc siguiendo las instrucciones en su sitio web o, en Linux, de la siguiente manera:

sudo apt-get install pandoc

Después de eso, necesita tener XeTex instalado en su máquina:

Ahora puede navegar a la carpeta que contiene su IPython Notebook y ejecutar el siguiente comando:

jupyter nbconvert --to pdf MyNotebook.ipynb

Para obtener más información, consulte este enlace .

Tanmay Lata
fuente
4

Como dicen los comentarios a la pregunta, necesitará pandoc y latex (por ejemplo, TeXShop). Instalé pandoc con Homebrew, solo tomó un segundo. Teniendo pandoc y TeXShop, podría generar latex pero no pdf (en la línea de comando).

ipython nbconvert --to latex mynotebook.ipynb

Al explorar el archivo latex (.tex) con TeXShop, el error se debió a la falta de hojas de estilo y defs. Después de instalar todos estos (adjustbox.sty, adjcalc.sty, trimclip.sty, collectbox.sty, tc-pgf.def, ucs.sty, uni-global.def, utf8x.def, ucsencs.def), finalmente lo hizo trabajo.

Sin embargo, el resultado parece un poco extraño para mi gusto. Es una lástima que al imprimir el html desde Safari se pierda el color de sintaxis. De lo contrario, no se ve tan mal. (Todo esto está en OS X).

telliott99
fuente
1
La siguiente línea corta generó directamente un archivo PDF sin dejar ningún archivo intermedio creado a través de la compilación. jupyter nbconvert --to pdf filename.ipynb
llinfeng
Al menos ahora tienen una solución para imprimir con color para que imprimir el HTML directamente en PDF sea menos malo: github.com/jupyter/notebook/issues/840
flutefreak7
3

Este script de Python tiene GUI para seleccionar con el explorador un cuaderno Ipython que desea convertir a pdf. El enfoque con wkhtmltopdf es el único enfoque que encontré que funciona bien y proporciona archivos PDF de alta calidad. Otros enfoques descritos aquí son problemáticos, el resaltado de sintaxis no funciona o los gráficos están desordenados.

Deberá instalar wkhtmltopdf: http://wkhtmltopdf.org/downloads.html

y Nbconvert

pip install nbconvert
# OR
conda install nbconvert

Secuencia de comandos de Python

# Script adapted from CloudCray
# Original Source: https://gist.github.com/CloudCray/994dd361dece0463f64a
# 2016--06-29
# This will create both an HTML and a PDF file

import subprocess
import os
from Tkinter import Tk
from tkFileDialog import askopenfilename

WKHTMLTOPDF_PATH = "C:/Program Files/wkhtmltopdf/bin/wkhtmltopdf"  # or wherever you keep it

def export_to_html(filename):
    cmd = 'ipython nbconvert --to html "{0}"'
    subprocess.call(cmd.format(filename), shell=True)
    return filename.replace(".ipynb", ".html")


def convert_to_pdf(filename):
    cmd = '"{0}" "{1}" "{2}"'.format(WKHTMLTOPDF_PATH, filename, filename.replace(".html", ".pdf"))
    subprocess.call(cmd, shell=True)
    return filename.replace(".html", ".pdf")


def export_to_pdf(filename):
    fn = export_to_html(filename)
    return convert_to_pdf(fn)

def main():
    print("Export IPython notebook to PDF")
    print("    Please select a notebook:")

    Tk().withdraw() # Starts in folder from which it is started, keep the root window from appearing 
    x = askopenfilename() # show an "Open" dialog box and return the path to the selected file
    x = str(x.split("/")[-1])

    print(x)

    if not x:
        print("No notebook selected.")
        return 0
    else:
        fn = export_to_pdf(x)
        print("File exported as:\n\t{0}".format(fn))
        return 1

main()
Philipp Schwarz
fuente
El script es un poco largo para una respuesta de stackoverflow en realidad, y simplemente envuelve wkhtml. Creo que la respuesta será más clara si pones las opciones de la línea de comandos para wkhtml y un ejemplo.
Hugh Perkins
así que básicamente, está utilizando nbconvertpara exportar a html y luego utilizar wkhtmltopdfpara convertir a pdf. pero esto no está claro en su respuesta :-)
Hugh Perkins
Entonces, probé esto. Efectivamente, es mejor que exportar directamente a pdf. Extrañamente, parte de mi mathjax se procesa correctamente (al comienzo del documento) y luego deja de procesarse, aproximadamente 12 páginas en el documento, sin ninguna razón obvia.
Hugh Perkins
3

Estoy usando Anaconda-Jupyter Notebook en el sistema operativo: Ubuntu 16.0 para la programación de Python.

Instale Nbconvert, Pandoc y Tex:

Abra una terminal e implemente los siguientes comandos en ella.

Instale Nbconvert: aunque es parte del ecosistema de Jupyter, aún así instálelo una vez más

$conda install nbconvert

O

$pip install nbconvert

Pero recomendaré usar conda en lugar de pip si está usando anaconda

Instale Pandoc: ya que Nbconvert usa Pandoc para convertir markdown a formatos distintos a HTML. Escriba el siguiente comando

$sudo apt-get install pandoc

Instalar TeX: para convertir a PDF, nbconvert usa TeX. Escriba el siguiente comando

$sudo apt-get install texlive-xetex

Después de la ejecución de estos comandos, cierre los cuadernos abiertos, actualice la página de inicio o reinicie el kernel del cuaderno abierto. Ahora intente descargar el cuaderno como pdf :)

Nota: Para obtener más detalles, consulte la documentación oficial:
https://nbconvert.readthedocs.io/en/latest/install.html

Yogesh
fuente
2

Para convertir cualquier cuaderno Jupyter a PDF, siga las instrucciones a continuación:

( Estar dentro del cuaderno de Jupyter ):

En Mac OS :

comando + P -> obtendrá un cuadro de diálogo de impresión -> cambiar destino como PDF -> Haga clic en imprimir

En Windows :

Ctrl + P -> obtendrá un cuadro de diálogo de impresión -> cambiar destino como PDF -> Haga clic en imprimir

Si los pasos anteriores no generan PDF completo del cuaderno de Jupyter (probablemente porque Chrome, algunas veces, no imprime todas las salidas porque Jupyter hace un desplazamiento para salidas grandes),

Intente realizar los siguientes pasos para eliminar el desplazamiento automático en el menú : -

Créditos: @ ÂngeloPolotto

  1. En su cuaderno de Jupyter, haga clic en Celda en la parte superior del cuaderno de jupyter ingrese la descripción de la imagen aquí

  2. A continuación, haga clic en Todos los resultados -> Alternar el desplazamiento para eliminar el desplazamiento automático.

ingrese la descripción de la imagen aquí

Akshay Ramesh
fuente
Estoy de acuerdo, pero Chrome, algunas veces, no imprime todos los resultados porque Jupyter hace un desplazamiento para grandes resultados. Necesita eliminar el desplazamiento automático en el menú Celda-> Todas las salidas-> Alternar desplazamiento (referencia: stackoverflow.com/a/52803744/6846888 )
Ângelo Polotto
¿Puede agregar esta información en su respuesta? Esto puede resultar muy útil para más usuarios.
Ângelo Polotto
1
Sí @ ÂngeloPolotto, he agregado su información en mi respuesta.
Akshay Ramesh
1

Este problema se experimentó tanto con Ubuntu como con Mac OSX. Tras una frenética serie de búsquedas y ensayos, ambos se resolvieron. Esto requiere tanto texy pandoc; Ambos programas externos jumbo no pueden ser instalados por Python pip.

Mac OSX: usando MacPorts instalación de pandoc

port install pandoc

Esto debería tardar casi una hora en completarse (en el caso habitual ). Si el problema persiste, es posible que deba instalar la distribución MacTeX. de TeXLive.

Para Ubuntu: instale vanilla TeXLive desde el instalador de red , no a través de apt-get . Luego instale pandoc usando apt-get.

sudo apt-get install pandoc

Una instalación completa de TeXLive requeriría hasta 4,4 GB en disco.

Para evitar todos estos problemas, la forma recomendada de usar IPython / Jupyter Notebook sería instalar la distribución Anaconda Python.

Ébe Isaac
fuente
1

También tuve todo tipo de problemas para resolver esto. No sé si proporcionará exactamente lo que necesita, pero descargué mi cuaderno como un archivo HTML, luego lo abrí en mi navegador Chrome y luego lo imprimí como un archivo PDF, que guardé. Capturó todo mi código, texto y gráficos. Fue lo suficientemente bueno para lo que necesitaba.

twin_pilgrim
fuente
1
En mi caso, el html pone una celda por página incluso si es demasiado larga. Así que no es una solución
Juh_
1

Si está utilizando la versión en la nube de Sagemath , simplemente puede ir a la esquina izquierda,
seleccionar Archivo -> Descargar como -> Pdf a través de LaTeX (.pdf)
Verifique la captura de pantalla si lo desea.

Captura de pantalla Convertir ipynb a pdf

Si no funciona por alguna razón, puede intentarlo de otra manera.
seleccione Archivo -> Vista previa de impresión y luego en la vista previa
haga clic con el botón derecho -> Imprimir y luego seleccione guardar como pdf.

Lefteris Xris
fuente
Y si eso no funciona, puede usar nbconvert directamente en la línea de comando y ver exactamente qué está causando problemas con el látex.
William Stein
1

Como miembro nuevo, no pude simplemente agregar un comentario en la publicación, pero quiero segundo que la solución ofrecida por Phillip Schwartz funcionó para mí. Con suerte, las personas en una situación similar intentarán ese camino antes con el énfasis. No tener saltos de página fue un problema frustrante durante bastante tiempo, así que estoy agradecido por la discusión anterior.

Como dijo Phillip Schwartz: "Deberá instalar wkhtmltopdf: [ http://wkhtmltopdf.org/downloads.html][1]

y Nbconvert "

Luego agrega una celda del tipo "rawNBConvert" e incluye:

<p style="page-break-after:always;"></p>

Eso pareció funcionar para mí, y el PDF generado tenía el salto de página en las ubicaciones correspondientes. Sin embargo, no es necesario ejecutar el código personalizado, ya que parece que la ruta "normal" de descargar el cuaderno como HTML, abrir en el navegador e imprimir en PDF funciona una vez instaladas esas utilidades.

Ody
fuente
1

notebook-as-pdf Instalar python -m pip install notebook-as-pdf pyppeteer-install

Úselo También puede usarlo con nbconvert:

jupyter-nbconvert: a PDF a través del nombre de archivo HTML.ipynb

que creará un archivo llamado filename.pdf.

o instalar pip notebook-as-pdf

crear pdf desde el cuaderno jupyter-nbconvert-toPDFviaHTML

Dhiren Biren
fuente
0

Lo que encontré fue que nbconvert / utils / pandoc.py tenía un error de código que resultó en el error de mi máquina. El código verifica si pandoc está en su ruta de variables ambientales. Para mi máquina, la respuesta es no. ¡Sin embargo pandoc.exe es!

La solución fue agregar '.exe' al código en la línea 69

if __version is None:
    if not which('pandoc.exe'):
        raise PandocMissing()

Lo mismo ocurre con 'xelatex' no está instalado. Agregue al archivo nbconvert / exporters / pdf.py en la línea 94

    cmd = which(command_list[0]+'.exe')
jvdam
fuente
0

Para convertir .ipynb en pdf, su sistema debe contener 2 componentes,

  1. nbconvert : es parte de jupyter permite convertir ipynb a pdf

    pip install nbconvert
    OR 
    conda install nbconvert
    
  2. XeTeX: convierte ipynb a formato .tex y luego convierte a pdf.

    sudo apt-get install texlive-xetex
    

Entonces puede usar el siguiente comando para convertir a pdf,

ipython nbconvert --to pdf YOURNOTEBOOK.ipynb

En caso de que no funcione, instale pandoc y vuelva a intentarlo.

sudo apt-get install pandoc
Pritesh Gohil
fuente
0

Para los usuarios de Ubuntu, se puede encontrar una respuesta aquí . También lo cito:

La causa más probable es que no ha instalado las dependencias adecuadas. Su sistema Ubuntu debe tener algunos paquetes instalados con respecto a la conversión de archivos LaTeX y XeTeX, para poder guardar su cuaderno como PDF. Puede instalarlos mediante:

sudo apt-get install texlive texlive-xetex texlive-generic-extra texlive-generic-recommended pandoc

Además, nbconverthay otra dependencia que generalmente se instala automáticamente con jupyter. Pero puede instalarlo solo para estar seguro, mientras tiene su entorno virtual activado:

pip install -U nbconvert
pgmank
fuente
0

Tuve problemas para mostrar correctamente algunos símbolos con la descarga regular como pdf . Así que descargué como tex jupyter nbconvert --to latex "my notebook.ipynb", hice algunos ajustes con el bloc de notas (como ejemplo, en mi caso necesitaba estas líneas para mi idioma

\usepackage{tgpagella}
\usepackage[lithuanian,english]{babel}

) y luego exportado a pdf con latex --output-format=pdf "my notebook.tex".

Pero al final, sin embargo, para conservar los mismos caracteres que usted ve en un navegador que terminé usando mi impresión del navegador Chrome: Ctrl+P Print to pdf. Agrega encabezado y pie de página innecesarios, pero todo lo demás permanece como está. No más errores al procesar la barra de progreso de tqdm, no más código saliendo de la página y así sucesivamente. Simple como eso.

Lukas
fuente
0

En cualquier sistema, los pasos básicos para configurar correctamente nbconvert para convertir cuadernos ipython a pdf / latex son

  1. Instalar nbconvert
  2. Instalar pandoc
  3. Instalar Texlive

Instalación de nbconvert

pip install nbconvert

o conda install nbconvert

Instalación de pandoc

sudo apt-get install pandoc para Ubuntu

o sudo yum install pandocpara CentOS

para otros visite pandoc-installation

Instalación de texlive

Puede instalar los paquetes recomendados o la instalación completa. Para Ubuntu

sudo apt-get install texlive texlive-xetex texlive-generic-extra texlive-generic-recommended

'

Para otros y para instalar texlive por completo, siga las instrucciones dadas en tug según su sistema y elección.

Descargué el archivo tar.gz de tug-texlive-download y seguí las instrucciones dadas en TeX Live - Instalación rápida . Instrucciones de instalación en resumen:

  1. Limpiar

    rm -rf /usr/local/texlive/2019

    rm -rf ~/.texlive2019

  2. Ejecutar el instalador

    descomprimir el archivo zip

    cd /your/unpacked/directory

    perl install-tl

    Ingrese el comando: yo

  3. Configuración de camino

    sudo vi /etc/bash.bashrc e insertar

    PATH=/usr/local/texlive/2019/bin/x86_64-linux:$PATH; export PATH

    MANPATH=/usr/local/texlive/2019/texmf-dist/doc/man:$MANPATH; export MANPATH

    INFOPATH=/usr/local/texlive/2019/texmf-dist/doc/info:$INFOPATH; export INFOPATH

  4. Configuración del tamaño de papel predeterminado

    tlmgr paper letter

Los comandos pueden diferir según su sistema, pero los pasos básicos siguen siendo los mismos.

Manojk07
fuente
0

Tuve este error en Windows 10. Seguí estos tres pasos y resolvió mi problema:

  1. Instalar nbconvert

    pip instalar nbconvert

  2. Instalar pandoc

https://pandoc.org/installing.html

  1. Instalar miktex

https://miktex.org/download


También es bueno actualizar las bibliotecas:

pip install jupyter --upgrade
pip install --upgrade --user nbconvert
mah65
fuente