把Python程序打包成exe

最新有点时间,学习了pyqt5编写界面化程序,练手写了几个小程序,想到无法在没有python运行环境的电脑上运行,百度了下,发现可以使用pyinstaller这个包来实现。
1、安装pyinstaller
可以到官网下载安装包,但最简单的肯定是pip安装,还能自动安装依赖的包:

pip install pyinstaller

安装完成后,cmd中运行一下pyinstaller命令,看是否安装成功。

2、打包测试
打开cmd命令行,定位到py主文件所在的目录下,执行打包,我这里使用的命令是

pyinstaller -D -w -i xx.ico xxx.py

-D含义是打包成文件夹(-F则会打包成单个exe),-w含义是运行时不打开console窗口,-i是添加exe文件的图标,其它命令参见百度。
打包成功后会生成几个文件夹及配置文件,最终产物为dist目录下的对应名称文件夹。

3、遇到的问题
在打包时,发现以下问题:
1、打包后无法运行,报windows platform错误,从python目录下找到platforms包后,手动添加到生成的文件夹中,即可正常运行。
或者在打包命令中添加如下:

pyinstaller -D -w -i bw.ico --add-binary=platforms/*.dll;./platforms --add-data=bw.png;. main.py

2、打包后除了png格式外的图片在界面中都无法显示,百度一下后认为是缺少imageformats包,但添加后,在其它电脑上仍无法显示,暂未找到解决方法,只能临时把其它格式的图片转换为png输出到界面上,代码如下:

        BytesIOObj = BytesIO()
        BytesIOObj.write(resp.content)#这里resp.content是网络图片流,本地图片一样处理即可
        img = Image.open(BytesIOObj)
        img = img.convert("RGBA")
        qim = ImageQt(img)
        pixmap = QPixmap.fromImage(qim)
        self.yzmPic.setPixmap(pixmap)

3、打包后的文件夹过大,这里暂时没有好的办法,只发现mkl开关的dll文件可以删除掉,不影响程序运行,另外在编码时尽量少引入无关的包

4、如何打包成32位程序
我是在64位windows环境下打包的程序,在实际运行程序时,32位系统无法运行,针对这个问题,参考了https://blog.csdn.net/ruibin_cao/article/details/83962271
这里使用Anaconda的多个python环境共存的机制来实现:
1、首先用Anaconda安装后自带的Prompt命令窗,设置变量

set CONDA_FORCE_32BIT=1

这时候使用conda info命令,可以看到已切换到32位环境。

2、配置一个新的python环境,可自定义版本号

conda create -n python36_32bit python=3.6

并切换到这个新环境中

conda activate python36_32bit

这时可以看到命令行前带了前缀,表明已经切换成功。

3、打包程序
用pip命令安装pyinstaller等相关包后,进行打包即可。
这里我打包后报错:
Failed to execute script pyi_rth_pkgres
经参考多个文章并测试后,应该是setuptools版本过高导致的问题(我用的是46版本,竟然不向下兼容,鄙视一下)
降低版本后正常

pip uninstall setuptools
pip install -i https://mirrors.aliyun.com/pypi/simple/ setuptools==44.0.0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值