pyinstaller打包.py文件为.exe执行失败
成功情况
先说下打包成功情况,方便对照。
我进行打包的python项目结构如下图:

src文件夹里这几个py文件有些调用了Z3包。这个包我提前下好了:
pip install z3-solver
(该包的名称在PyPI上实际上是z3-solver而不是z3)下载路径是C:\Users\godlo\AppData\Local\Programs\Python\Python38\Lib\site-packages\z3。
直接对这个项目下的主文件进行单文件打包,pyinstaller是会将代码中import的py文件(src里的py文件)、以及src下py文件里import的py文件(z3包下的py文件)都包含进去,打包为一个exe的,但是其他的资源文件,如dll,就不会被包含了。
这时启动exe,就会在cmd窗口里得到如下报错:
Could not find libz3.dll;consider adding the directory containing it to your system's PATH environment variable, - the Z3_LIBRARY_PATH environment variable,or to the custom z3_LIB DIRS Python-builtin before importing the z3 module,e.g.via import builtins builtins.Z3_LIB_DIRS ['/path/to/1ibz3.dll]'
我选择添加环境变量,然后就可以正常运行了:

失败情况
我遇到的失败的情况是不会弹出上面的那个报错,而是这样:
这里最终指向的这个z3core.py的19行 内容是这样:
_z3_lib_resource_path = _file_manager.enter_context( importlib_resources.as_file(_z3_lib_resource) )
具体来说,这个错误指向的是 importlib_resources 在尝试将资源文件(如动态链接库或数据文件)转换为临时文件时失败了,因为找不到相应的文件。
其实也是找不到dll,跟上面的那个报错本质是差不多的,但问题是这个解决不了。
不管是加环境变量,在打包时嵌入dll、还是将dll放在打包后exe的同路径下,永远都是这个报错。
让人感觉上面那种情况是exe还在努力找dll,只是没找到。这个情况都没在找了。
可能原因
我成功的情况是换了台电脑,失败的那台电脑装的是python3.8.5;pyinstaller是4.0;成功的电脑是3.10.10、pyinstaller是6.6.0

浙公网安备 33010602011771号