使用py2exe打包时出现导入错误

4

我使用py2exe打包了一个用python编写的小脚本。这个脚本使用了很多包,其中之一是reportlab。 在使用py2exe打包后,我尝试运行可执行文件,但是出现了以下错误:

C:\Python26\dist>DELchek.exe
Traceback (most recent call last):
File "DELchek.py", line 12, in <module>
File "reportlab\pdfgen\canvas.pyc", line 25, in <
File "reportlab\pdfbase\pdfdoc.pyc", line 22, in
File "reportlab\pdfbase\pdfmetrics.pyc", line 23,
File "reportlab\pdfbase\_fontdata.pyc", line 158,
ImportError: No module named _fontdata_enc_winansi

但是我可以在reportlab文件夹中看到'_fontdata_enc_winansi'模块。有人可以帮我修复这个问题吗?
2个回答

13

我过去也遇到了与py2exe捆绑reportlab的同样问题。它动态导入了一堆模块,而py2exe在组装依赖关系时无法识别这些模块。最简单的解决方法是在代码中直接导入所需的模块:

from reportlab.pdfbase import _fontdata_enc_winansi
from reportlab.pdfbase import _fontdata_enc_macroman
from reportlab.pdfbase import _fontdata_enc_standard
from reportlab.pdfbase import _fontdata_enc_symbol
from reportlab.pdfbase import _fontdata_enc_zapfdingbats
from reportlab.pdfbase import _fontdata_enc_pdfdoc
from reportlab.pdfbase import _fontdata_enc_macexpert
from reportlab.pdfbase import _fontdata_widths_courier
from reportlab.pdfbase import _fontdata_widths_courierbold
from reportlab.pdfbase import _fontdata_widths_courieroblique
from reportlab.pdfbase import _fontdata_widths_courierboldoblique
from reportlab.pdfbase import _fontdata_widths_helvetica
from reportlab.pdfbase import _fontdata_widths_helveticabold
from reportlab.pdfbase import _fontdata_widths_helveticaoblique
from reportlab.pdfbase import _fontdata_widths_helveticaboldoblique
from reportlab.pdfbase import _fontdata_widths_timesroman
from reportlab.pdfbase import _fontdata_widths_timesbold
from reportlab.pdfbase import _fontdata_widths_timesitalic
from reportlab.pdfbase import _fontdata_widths_timesbolditalic
from reportlab.pdfbase import _fontdata_widths_symbol
from reportlab.pdfbase import _fontdata_widths_zapfdingbats

搜索还显示,Sankar找到了另一种解决方案,其中在设置脚本中包括以下软件包:

packages=[
    'reportlab',
    'reportlab.graphics.charts',
    'reportlab.graphics.samples',
    'reportlab.graphics.widgets',
    'reportlab.graphics.barcode',
    'reportlab.graphics',
    'reportlab.lib',
    'reportlab.pdfbase',
    'reportlab.pdfgen',
    'reportlab.platypus',
], 

2
这也解决了我在导入PISA时使用pyinstaller的问题。 - mdd061000

2

如果您不使用图形,请跳过它们...

packages= [
    'reportlab',
    'reportlab.lib',
    'reportlab.pdfbase',
    'reportlab.pdfgen',
    'reportlab.platypus',
]

setup(name='pitman',
    version='1.0',
    author='cue',
    data_files = dataFiles,
    console=['xxx.py', 'yyy.py'],      # change to windows=[...]
    options = {
        "py2exe": { "dll_excludes": ["MSVCP90.dll"],
                    "packages": packages,
                    "includes": includes }
                  }
  )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接