首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xhtml2pdf ImportError - Django

xhtml2pdf ImportError - Django
EN

Stack Overflow用户
提问于 2014-02-27 17:11:25
回答 1查看 8.6K关注 0票数 10

我使用xhtml2pdf安装了pip,以便与Django一起使用。我得到了以下ImportError:

代码语言:javascript
复制
Reportlab Toolkit Version 2.2 or higher needed

但我有报告3.0

代码语言:javascript
复制
>>> import reportlab
>>> print reportlab.Version                                                                                                                                                                                                                 
3.0

我在__init__.py of xhtml2pdf中找到了这个try catch块

代码语言:javascript
复制
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

util.py中还有另一个错误

代码语言:javascript
复制
if not (reportlab.Version[0] == "2" and reportlab.Version[2] >= "1"):

那不应该是这样的吗:

代码语言:javascript
复制
if not (reportlab.Version[:3] >="2.1"):

怎么回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-27 18:23:25

util.py中,编辑以下行:

代码语言:javascript
复制
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")

并设定为:

代码语言:javascript
复制
if not (reportlab.Version[:3] >="2.1"):
    raise ImportError("Reportlab Version 2.1+ is needed!")

REPORTLAB22 = (reportlab.Version[:3] >="2.1")

编辑

虽然上面的方法有效,但它仍然使用字符串文本进行版本检查。在xhtml2pdf项目中有一个拉请求,它提供了一个比较使用整数元组的版本的更优雅的解决方案。这是拟议的解决办法:

代码语言:javascript
复制
_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)
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22075485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档