pyinstaller 和 reportlab 的问题
Issues with pyinstaller and reportlab
好吧,我有一个python项目要编译,所以我决定使用pyinstaller(第一次编译python)。现在它编译得很好但是当我 运行 exe 时它 returns -1。所以经过一番摸索后,我发现它与 reportlab.platypus.
有关
所以我的第一直觉是检查使用钩子是否改变了什么,所以我尝试添加 reportlab.pdfbase._fontdata
和 reportlab.lib.utils
钩子(这些是我能找到的与 reportlab 相关的唯一钩子文件).尽管如此,它仍然失败了。
这是终端中 exe 为 运行 时的输出:
Traceback (most recent call last):
File "<string>", line 12, in <module>
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
File "C:\Users\Jon\Desktop\PyInstaller-3.1.1\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "Board_builder.py", line 5, in <module>
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
File "C:\Users\Jon\Desktop\PyInstaller-3.1.1\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\reportlab\platypus\__init__.py", line 7, in <module>
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
File "C:\Users\Jon\Desktop\PyInstaller-3.1.1\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\reportlab\platypus\flowables.py", line 32, in <module>
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
File "C:\Users\Jon\Desktop\PyInstaller-3.1.1\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\reportlab\lib\styles.py", line 28, in <module>
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
File "C:\Users\Jon\Desktop\PyInstaller-3.1.1\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\reportlab\rl_config.py", line 131, in <module>
File "site-packages\reportlab\rl_config.py", line 102, in _startUp
File "site-packages\reportlab\lib\utils.py", line 695, in rl_isdir
AttributeError: 'FrozenImporter' object has no attribute '_files'
main returned -1
据我所知,它在 "Board_builder.py" 中的 运行ning 第 5 行崩溃(在我的项目中处理 reportlab 的文件)这里是该文件的前 5 行:
import subprocess
import datetime
from reportlab.lib.units import mm, inch
from reportlab.lib.pagesizes import legal, landscape
from reportlab.platypus import SimpleDocTemplate, Table
我不知道它抛出的 AttributeError 是什么意思,欢迎任何建议!
好吧,我成功了,
决定去看看 AttributeError 究竟是从哪里抛出的,所以我检查了 reportlab/rl_config.py
和 reportlab/lib/utils.py
文件,发现它正在检查对象以递归方式查找目录(如 rl_isdir
).一些 FrozenImporter 是如何卡住的,正在检查其他对象列表
所以我替换了行:
return len(list(filter(lambda x,pn=pn: x.startswith(pn),list(__loader__._files.keys()))))>0
与:
try:
return len(list(filter(lambda x,pn=pn: x.startswith(pn),list(__loader__._files.keys()))))>0
except AttributeError:
return False
这可能不是解决问题的最干净、最有效的方法,但它只涉及原始代码的一行,所以我发现这是最直接的解决方案。
好吧,我有一个python项目要编译,所以我决定使用pyinstaller(第一次编译python)。现在它编译得很好但是当我 运行 exe 时它 returns -1。所以经过一番摸索后,我发现它与 reportlab.platypus.
有关所以我的第一直觉是检查使用钩子是否改变了什么,所以我尝试添加 reportlab.pdfbase._fontdata
和 reportlab.lib.utils
钩子(这些是我能找到的与 reportlab 相关的唯一钩子文件).尽管如此,它仍然失败了。
这是终端中 exe 为 运行 时的输出:
Traceback (most recent call last):
File "<string>", line 12, in <module>
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
File "C:\Users\Jon\Desktop\PyInstaller-3.1.1\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "Board_builder.py", line 5, in <module>
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
File "C:\Users\Jon\Desktop\PyInstaller-3.1.1\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\reportlab\platypus\__init__.py", line 7, in <module>
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
File "C:\Users\Jon\Desktop\PyInstaller-3.1.1\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\reportlab\platypus\flowables.py", line 32, in <module>
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
File "C:\Users\Jon\Desktop\PyInstaller-3.1.1\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\reportlab\lib\styles.py", line 28, in <module>
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
File "C:\Users\Jon\Desktop\PyInstaller-3.1.1\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
exec(bytecode, module.__dict__)
File "site-packages\reportlab\rl_config.py", line 131, in <module>
File "site-packages\reportlab\rl_config.py", line 102, in _startUp
File "site-packages\reportlab\lib\utils.py", line 695, in rl_isdir
AttributeError: 'FrozenImporter' object has no attribute '_files'
main returned -1
据我所知,它在 "Board_builder.py" 中的 运行ning 第 5 行崩溃(在我的项目中处理 reportlab 的文件)这里是该文件的前 5 行:
import subprocess
import datetime
from reportlab.lib.units import mm, inch
from reportlab.lib.pagesizes import legal, landscape
from reportlab.platypus import SimpleDocTemplate, Table
我不知道它抛出的 AttributeError 是什么意思,欢迎任何建议!
好吧,我成功了,
决定去看看 AttributeError 究竟是从哪里抛出的,所以我检查了 reportlab/rl_config.py
和 reportlab/lib/utils.py
文件,发现它正在检查对象以递归方式查找目录(如 rl_isdir
).一些 FrozenImporter 是如何卡住的,正在检查其他对象列表
所以我替换了行:
return len(list(filter(lambda x,pn=pn: x.startswith(pn),list(__loader__._files.keys()))))>0
与:
try:
return len(list(filter(lambda x,pn=pn: x.startswith(pn),list(__loader__._files.keys()))))>0
except AttributeError:
return False
这可能不是解决问题的最干净、最有效的方法,但它只涉及原始代码的一行,所以我发现这是最直接的解决方案。