PyInstaller生成的exe不工作,项目使用ReportLab

2024-09-28 17:02:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的项目生成一个exe。大约一个月前我的项目没有使用ReportLab时,它没有问题,但是现在,没有那么多了。在

在搜索之后,我发现问题出在一个pyinstaller文件中a missing import。 问题解决了对吗?不完全是。在

现在我得到这个错误。。。在

Traceback (most recent call last):
File "<string>", line 18, in <module>
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\PyInstaller\loader\iu.py", line 386, in importHook 
mod = _self_doimport(nm, ctx, fqname)
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\PyInstaller\loader\iu.py", line 480, in doimport
exec co in mod.__dict__
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\myproject\build\pyi.win32\myproject\out00-PYZ.pyz\reports.My_Report_File", line 10, in <module>
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\PyInstaller\loader\iu.py", line 431, in importHook
mod = self.doimport(nm, ctx, ctx + '.' + nm)
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\PyInstaller\loader\iu.py", line 480, in doimport
exec co in mod.__dict__
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\myproject\build\pyi.win32\myproject\out00-PYZ.pyz\reportlab.pdfgen.canvas", line 25, in <module>
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\PyInstaller\loader\iu.py", line 431, in importHook
mod = self.doimport(nm, ctx, ctx + '.' + nm)
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\PyInstaller\loader\iu.py", line 480, in doimport
exec co in mod.__dict__
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\myproject\build\pyi.win32\myproject\out00-PYZ.pyz\reportlab.pdfbase.pdfdoc", line 22, in <module>
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\PyInstaller\loader\iu.py", line 431, in importHook
mod = self.doimport(nm, ctx, ctx + '.' + nm)
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\PyInstaller\loader\iu.py", line 480, in doimport
exec co in mod.__dict__
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\myproject\build\pyi.win32\myproject\out00-PYZ.pyz\reportlab.pdfbase.pdfmetrics", line 23, in <module>
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\PyInstaller\loader\iu.py", line 431, in importHook
mod = self.doimport(nm, ctx, ctx + '.' + nm)
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\PyInstaller\loader\iu.py", line 480, in doimport
exec co in mod.__dict__
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\myproject\build\pyi.win32\myproject\out00-PYZ.pyz\reportlab.pdfbase._fontdata", line 158, in <module>
File "F:\Python\pyinstaller-2.0\pyinstaller-2.0\PyInstaller\loader\iu.py", line 409, in importHook
raise ImportError("No module named %s" % fqname)
ImportError: No module named _fontdata_enc_winansi

在四处搜索时,我发现this只导致了一个建议的解决方案,即强制在我的代码文件中导入所有内容。我有太多的报告文件,这让我很难去想。在

我读到一些关于隐藏进口的东西。也许这对我有帮助,但我不知道。任何帮助都将不胜感激。谢谢您。在

编辑:py2exe的similar问题和解决方案。。。。在


Tags: inpymodmyprojectlineloaderfilemodule
2条回答

将名为hook-reportlab.pdfbase._fontdata.py的文件添加到pyinstaller的hooks子目录中。内容应该是这样的:

hiddenimports = [
    '_fontdata_enc_macexpert',
    '_fontdata_enc_macroman',
    '_fontdata_enc_pdfdoc',
    '_fontdata_enc_standard',
    '_fontdata_enc_symbol',
    '_fontdata_enc_winansi',
    '_fontdata_enc_zapfdingbats',
    '_fontdata_widths_courier',
    '_fontdata_widths_courierbold',
    '_fontdata_widths_courierboldoblique',
    '_fontdata_widths_courieroblique',
    '_fontdata_widths_helvetica',
    '_fontdata_widths_helveticabold',
    '_fontdata_widths_helveticaboldoblique',
    '_fontdata_widths_helveticaoblique',
    '_fontdata_widths_symbol',
    '_fontdata_widths_timesbold',
    '_fontdata_widths_timesbolditalic',
    '_fontdata_widths_timesitalic',
    '_fontdata_widths_timesroman',
    '_fontdata_widths_zapfdingbats']

这对我在pyinstaller2.1中起到了作用。顺便说一句,我从pyinstaller 1.5.1中借用了这个文件,在那里默认安装了它。在

我不知道我这样做是否正确。。。但我开始拔头发了。在

在四处阅读并浪费大量时间之后。。。在

我发现了一篇帖子,建议将整个丢失的库文件夹复制到包含exe的文件夹中。瓦拉!成功了。在

如果有更好/合适的方法来做这件事,请给我指点。在

相关问题 更多 >