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

posted @   ban_boi  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示