利用Pyinstaller打包代码时出现小错误的解决方案

19 篇文章 24 订阅

最近几天,由于项目需求,需要对代码进行打包封装,但打包完后,运行时,出现了一些小错误,这里进行简单的介绍一下。

在之前的博文中《如何在Windows10环境下,对Tensorflow代码进行打包封装(利用PyQt5制作界面)》已经介绍了如何利用PyQt制作界面,如何利用Pyinstaller对代码进行封装打包,这里不作介绍。这篇文章主要对打包过程中存在的部分比较隐秘的小问题进行汇总。

问题一:GDAL命令行下运行成功,但打包后运行出错

之前的博文已经介绍了一些利用GDAL库进行读取影像、创建矢量、矢栅转换等操作,用到的GDAL库版本为2.2.2,代码在cmd命令行下,运行成功,没有问题。

但打包成可执行文件exe后,却一直报错。

经过不断排查,发现出错的地方竟然是ReadAsArray这里,看下面的代码注释部分:

# -*- coding: utf-8 -*-
from osgeo import gdal
 
#读图像文件
def read_img(filename):
    dataset = gdal.Open(filename) #运行正常
    im_width = dataset.RasterXSize  #运行正常
    im_height = dataset.RasterYSize  #运行正常
    im_bands = dataset.RasterCount   #运行正常
    im_geotrans = dataset.GetGeoTransform()  #运行正常
    im_proj = dataset.GetProjection() #运行正常
    im_data = dataset.ReadAsArray(0,0,im_width,im_height) ####该行代码出错!!!
 
    del dataset 
 
    return im_width, im_height, im_bands, im_proj, im_geotrans, im_data

代码在前面几行都运行成功了,都能正确的读取影像的长、宽、波段数、投影等信息,但运行到 im_data = dataset.ReadAsArray(0,0,im_width,im_height) 这里时,出错了,程序直接退出,也没提示有什么问题。

命令行下能运行成功的代码,不知道为什么打包后就出错了。网上搜了一些此类问题的解决方案,无果。

经过多次尝试后,发现可能是GDAL版本的问题,遂尝试了几个GDAL版本。这里需要说明一下,在使用pip/conda安装GDAL库时,出错了,所以这里采用下载whl文件安装,下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/

最后,安装GDAL3.1.4版本后,代码在命令行和打包后的exe文件都能正常运行。

虽然代码可以正常运行,但又出现了新的问题,在创建矢量文件时,一直提示一个错误:

ERROR 1: PROJ: proj_create_from_database: Cannot find proj.db

虽然,也能创建矢量文件,但少了一些投影信息文件,ArcGIS也能打开,只是提示没有投影。

这个问题目前还没能有效的解决,在环境变量里添加了proj.db位置也不行。

考虑到这个问题暂时不是最迫切需要解决的,所以后续有时间再看看怎么解决。大家有好的解决方案,也可以通过评论告诉我,感谢!

问题二:打包时,使用upx压缩出错

在之前的博文中《如何在Windows10环境下,对Tensorflow代码进行打包封装(利用PyQt5制作界面)》提到了可以使用upx-3.95-win64 来对代码进行压缩打包,但在使用压缩打包时,命令为: pyinstaller -F test.py --upx upx-3.95-win64,出错了。

这里更新为: pyinstaller -F test.py --upx-dir=upx-3.95-win64,也不知道之前是怎么成功的(上次打包貌似要追溯到2018年了),可能是版本的问题吧!

总结

利用pyinstaller进行打包时,有时候会出现一些莫名其妙的错误,可能更换一下库的版本就能够解决,需要多试试。

建议新建一个环境,在新环境下打包,避免把一些没有用到的库打包进来,使得打包后的文件巨大无比,而且在新环境下,更换版本也比较方便,避免了更换版本导致之前的代码出错等问题。

目前,我仅遇到了这2个问题,后续再有问题,再对此博客进行更新!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值