سؤال

أنا ركبت xhtml2pdf استخدام pip للاستخدام مع جانغو.أحصل على خطأ الاستيراد التالي:

Reportlab Toolkit Version 2.2 or higher needed

ولكن لدي Reportlab 3.0

>>> import reportlab
>>> print reportlab.Version                                                                                                                                                                                                                 
3.0

لقد وجدت كتلة محاولة الالتقاط هذه في ملف __init__.py ل 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

هناك أيضًا خطأ آخر في util.py:

if not (reportlab.Version[0] == "2" and reportlab.Version[2] >= "1"):

ألا ينبغي أن يقرأ شيئًا مثل:

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

ما يعطي؟

هل كانت مفيدة؟

المحلول

في util.py تحرير الأسطر التالية:

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")

وتعيين على:

if not (reportlab.Version[:3] >="2.1"):
    raise ImportError("Reportlab Version 2.1+ is needed!")

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

يحرر

بينما يعمل ما سبق فإنه لا يزال يستخدم سلسلة حرفية للتحقق من الإصدار.هناك طلب سحب في xhtml2pdf المشروع بحل أكثر أناقة يقارن الإصدارات باستخدام مجموعات من الأعداد الصحيحة.وهذا هو الحل المقترح:

_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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top