代码环境:Windows11,pycharm2023.2.3,python3.12,用到包pymzml2.5.2,初学者
先按网络教程在虚拟环境中将正常运行的py项目打包,mark_tool.py是我的主程序。
-c参数是运行程序时显示控制台,方便我们调试。运行打包后的程序,控制台随着程序闪退。
为了看到报错信息,使用win+R,cmd运行程序,此时可看到报错
这个错误比较常规,通过网络得到解决方案,打包时加入参数--add-binary强制引入缺失文件
重新打包,程序正常运行
正常运行后点击某些需要调用pymzml包的功能,闪退报错
因为不熟悉pymzml包的运作原理,直接将报错复制上网搜索,按照这个博文所述引入request模块解决 AttributeError: module 'urllib' has no attribute 'request'-CSDN博客
重新打包运行,报错更新
这个报错我查了很久,都是说dns问题、网络连接问题。但是我写的程序并没有需要联网的地方,查看错误堆栈就是调用pymzml之后进行了联网操作。但是我直接运行py却不会报这个错,我以为是打包过程中又缺失了文件导致它需要去下载,又查了很多打包相关的内容,都不行。终于决定根据堆栈去看看源码到底怎么回事。
根据堆栈打开pymzmlobo.py文件,定位到152行,发现这里确实进行了联网操作
我在浏览器打开这个链接,提示“页面可能存在问题,或者已永久移动到新的网址”。所以,就是这个网址的问题了。我尝试直接将151、152行屏蔽,重新打包。报错更新
这个报错就又是很直白的报错了。程序运行目录下缺少obopsi-ms-1.1.0.obo这个文件,那个网址就是为了下载这个文件的。既然我们py运行没问题,说明我们本地是有这个文件的。不知道是不是也可以强制打包,我是直接将环境目录中的文件拷贝到运行目录中了,这个文件也很好找就在pymzml安装目录里
直接将obo目录拷到exe同级目录,此时再运行程序,可以正常使用啦!
对自己的几点建议:
①遇到不熟悉的报错,在查到错误代码对应的可能问题后,还是要先自己根据错误堆栈,回到源码中去排查问题,每个人遇到的问题不尽相同,不可能完全依赖他人经验来debug
②可以看到,在打包pymzml相关内容时,除了py文件全部没有打包进去,包括第一点中的那个version.txt。是不是有什么更好的方法可以将全部所需的内容都打包进去,有待进一步学习
③虚拟环境是个好文明,虽然我还没有体验到它打包程序能减小体积的优势,但是像这样在其中修改python包就不会影响其他项目了。并且我前不久刚换新电脑,配置环境下载各种模块又是一头包,然而我将原来带有虚拟环境的项目直接拷贝到新电脑上就能用,简直不要太方便
到此这篇py文件打包成exe(py文件打包成exe执行出错)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/69250.html