python携库一并打包问题实例(记打包包含pyecharts库程序)

打包程序中包含pyecharts库,使用命令$ pyinstaller -F -w  test.py 进行打包时可以正常生成.exe程序,但执行时报错:Failed to execute script 'test' due to unhandled exception: [Errno 2] No such file or diectory: 'C:\\Users\\...\\Temp\\_MEI104722\\pyecharts\\datasets\\map_filename.json'

 即:程序无法执行,没有以下文件或文件夹。

查看相关目录,发现_MEI104722是一个临时文件夹,在程序执行时生成,但未生成子文件夹pyecharts,导致文件缺失;

搜索本机文件发现:pyecharts\datasets\map_filename.json在pyecharts库的安装目录下,猜测是pyinstaller打包程序时没有将pyecharts库中的所有的数据打包,使得程序在执行时无法生成需要的临时文件;

方法一:

参照:https://blog.csdn.net/weixin_42272874/article/details/122985608 作者给出了携库打包的方法,及在打包命令中加入添加库的参数--add-data="库安装目录;pyecharts",假如你的python环境中pyecharts库安装目录为:C:\swinstall\Anaconda\envs\centermap\Lib\site-packages,则打包命令应为$pyinstaller --add-data="C:\swinstall\Anaconda\envs\centermap\Lib\site-packages\pyecharts;pyecharts" -F -w test.py;至此便得到可发布和独立运行的.exe程序。

使用pyinstaller打包,如果程序包含外部资源,则需要在打包时注明添加这些外部资源,将其与源码及依赖一起打包到.exe程序中;

注释:pyinstaller --add-data="源地址;目标地址" xx.py。windows以;分割,linux以:分割,即将源地址数据打包到目标地址处。

更多内容请阅读: https://blog.csdn.net/weixin_42272874/article/details/122985608

方法二:

使用命令$pyinstaller -D -w test.py 时,会在dist目录下生成test目录,test.exe在些文件夹下,运行些程序,报错为:xxx\dist\test\pyecharts\datasets\map_filename.json文件缺失,即,在生成的dist\test文件夹下缺少pyecharts\datasets\map_filename.json文件,查看test发现下没有pyecharts文件夹,根据前期推测,将pyecharts库安装目录中的pyecharts文件夹拷贝至test文件夹下,运行程序,程序正常执行。

思考:对比$pyinstaller -F xx.py 与 $pyinstaller -D xx.py两种程序发布方式,使用-F会生成整体的.exe程序,程序执行时会将所需要的数据放入生成的临时文件夹中,执行后销毁临时文件,这种方式有助于掩盖程序的内部信息,但不利于程序的调试、修改;使用-D会生成与程序同名的文件夹xx,文件夹内包含了.exe程序以及程序执行所需要的库与数据,此时,程序执行时无需生成临时文件夹存放所需的数据,只需要直接从xx文件夹下读取,所报错也更加直观,便于调试、修改;故:建议在调试程序时先以$pyinstaller -D xx.py尝试,在确定发布的.exe程序可以正常执行后,再使用$pyinstaller -F xx.py发布单一.exe程序,用于分享移植。

关于pyinstaller更深的思考可以看看:Python 如何打包pyechart?_huhu1986的博客-CSDN博客

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值