【问题标题】:PyInstaller generated exe not working, project uses ReportLabPyInstaller 生成的 exe 不工作,项目使用 ReportLab
【发布时间】:2013-09-02 12:20:50
【问题描述】:

我正在尝试为我的项目生成一个 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 问题和解决方案....

【问题讨论】:

  • 看来这个问题已经解决了:stackoverflow.com/questions/6786473/…
  • @MikeVella 该链接适用于 py2exe。我不明白这对我有什么帮助。我已经提到了问题中的链接。
  • 您是否尝试过 robots.jpg 在该答案中的建议?当你这样做时发生了什么?
  • @MikeVella 我在我的规范文件中插入了包列表并从中生成,同样的错误

标签: python pyside reportlab pyinstaller


【解决方案1】:

我不知道这是否是正确的做法......但我开始拔头发了。

看了一圈又浪费了很多时间,...

我发现有人建议复制整个丢失的库文件夹(在我的情况下是在我的 pythonxx 的站点包中)到包含 exe 的文件夹中 >。瓦拉!它奏效了。

如果有更好/正确的方法可以做到这一点,请赐教。

【讨论】:

    【解决方案2】:

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

    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']
    

    这对我来说适用于 pyinstaller 2.1。顺便说一句,我从默认安装的 pyinstaller 1.5.1 借用了这个文件。

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2019-12-04
      • 2020-11-17
      • 2015-02-13
      • 2016-06-05
      相关资源
      最近更新 更多