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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)