2011-07-22 52 views
4

我捆绑了一个使用py2exe编写的使用python编写的小脚本。该脚本使用了很多软件包,其中一个是reportlab。 使用py2exe绑定后我试图运行可执行文件,它返回以下错误:使用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”模块。有人可以帮我解决这个问题。

回答

12

我在过去用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 

一个搜索也表明桑卡尔发现another solution,这包括在安装脚本以下软件包:

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

谢谢,这帮了我很多! – snowflake

+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 } 
        } 
)