XHTML2PDF ImportError - Django
Pregunta
Instalé xhtml2pdf
usando pip
para usar con Django.Estoy obteniendo el siguiente importentror:
Reportlab Toolkit Version 2.2 or higher needed
pero tengo reportlab 3.0
>>> import reportlab
>>> print reportlab.Version
3.0
Encontré este bloque de atrapamiento en el __init__.py
de xhtml2pdf
:
REQUIRED_INFO = """
****************************************************
IMPORT ERROR!
%s
****************************************************
The following Python packages are required for PISA:
- Reportlab Toolkit >= 2.2 <http://www.reportlab.org/>
- HTML5lib >= 0.11.1 <http://code.google.com/p/html5lib/>
Optional packages:
- pyPDF <http://pybrary.net/pyPdf/>
- PIL <http://www.pythonware.com/products/pil/>
""".lstrip()
log = logging.getLogger(__name__)
try:
from xhtml2pdf.util import REPORTLAB22
if not REPORTLAB22:
raise ImportError, "Reportlab Toolkit Version 2.2 or higher needed"
except ImportError, e:
import sys
sys.stderr.write(REQUIRED_INFO % e)
log.error(REQUIRED_INFO % e)
raise
También hay otro error en el util.py
:
if not (reportlab.Version[0] == "2" and reportlab.Version[2] >= "1"):
no debería haber leído algo como:
if not (reportlab.Version[:3] >="2.1"):
¿Qué da?
Solución
en util.py
Edite las siguientes líneas:
if not (reportlab.Version[0] == "2" and reportlab.Version[2] >= "1"):
raise ImportError("Reportlab Version 2.1+ is needed!")
REPORTLAB22 = (reportlab.Version[0] == "2" and reportlab.Version[2] >= "2")
y establecer en:
if not (reportlab.Version[:3] >="2.1"):
raise ImportError("Reportlab Version 2.1+ is needed!")
REPORTLAB22 = (reportlab.Version[:3] >="2.1")
Editar
Mientras que lo anterior funciona, todavía usa literales de cadena para la verificación de la versión.Hay una solicitud de extracción en el proyecto xhtml2pdf
con una solución más elegante que compara las versiones utilizando tuplas de enteros.Esta es la solución propuesta:
_reportlab_version = tuple(map(int, reportlab.Version.split('.')))
if _reportlab_version < (2,1):
raise ImportError("Reportlab Version 2.1+ is needed!")
REPORTLAB22 = _reportlab_version >= (2, 2)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow