这里就只介绍常用的pyinstaller打包方法以及一些常遇到的问题
目录
一.打包步骤
第一步:安装打包所依赖的包(pyinstaller)
第二步:安装程序所需要的包(这一步只针对使用pycharm编写程序,cmd打包程序,若是使用python自带的idea可忽略这一步)
第三步:输入打包程序命令
二.常见问题
1.打包时出现path找不到的问题
1.1.解决方法
2.在win10 64位的环境下打包的exe在win7和win10的32位上无法运行的问题
2.1.解决方法
3.闪退问题
3.1.解决方法
在cmd命令行中输入以下命令,然后回车进行安装
pip install pyinstaller
然后等待安装成功
例如:程序使用了requests包,这时在cmd中就需要输入以下命令进行安装requests包
pip install requests
pyinstaller -选项 文件名.py
关于这里的选项有以下说明
-F:表示生成单一的exe文件
-w:表示执行exe文件时去除背后的dos窗口 ps:建议最初试验时保留dos,可以查看是否有错误发生
-p:有些需要手动添加包的位置(dir1,dir2)多个地址时以分号分开
-i:加入图标
例如:打包一个aaa.py的程序。需要不带dos窗口,单一的(即将dll等可扩展文件都放入exe文件中),同时aaa.py文件中调用了bbb.py文件中的类,使用ccc.ico的软件图标
此时,命令为
pyinstaller -p bbb.py -i ccc.ico -w -F aaa.py
然后回车,等待生成exe文件即可
生成的exe文件在aaa.py文件同目录下的dist文件夹中
当然,也可将这个打包功能加入到pycharm中,方法在下面的常见问题中
有时候因为版本问题出现了某种安装的库找不到路径。这时打包的命令可以再最后面加个
-path=‘路径’ 进行解决。
这个问题是我之前写程序时遇到的,现在找不到那个文件了,暂时提供不了图片了。遇到类似的问题可以这样试着解决下
如果你的打包环境是win10 64位的环境,按照上面说的步骤进行打包程序,那在win7 32或者64位的电脑上运行exe文件,会出现下图的问题
问题原因未知,但是我确定报错问题不是说这台win7 32位的设备缺少api-ms-win-core-path-l1-1-0.dll这个动态库,而是出在python上。我记得的是python3.9已经不支持在win7使用
2.1.1、下载提示的动态库。
(这里说下我自己的经历)但是按照提示信息,下载了api-ms-win-core-path-l1-1-0.dll这个库,然后按照其他博主的方法放到了system32文件夹下。虽然他这个方法解决了弹窗报错,但是我发现我的exe执行会发生闪退问题!exe闪退的可能因素非常多。(个人不建议使用这个方法)
2.1.2、用对应系统的虚拟机。
例如要在win7和win10的32 64位都能使用
步骤如下:
1.先安装一个虚拟机VM。然后再去下载win7的镜像文件。这一步骤在网上有很多的参考方法。
2.下载安装python3.7 32位,这里需要和根据你要运行exe的环境看齐,比如你和我一样要在win7 32位下运行python的exe。那么就安装32位的。
3.在win7中安装python程序所需要的各个库,顺便安装个pyinstaller库用于打包程序
2.1.3、使用32位的anaconda
这个方法可以在win10 64位的电脑上使用,具体如下
步骤:
1、安装Anaconda
32位 https://www.anaconda.com/download/ 。这里不再有过多的叙述,相关安装教程在其他博主中有更详细的讲解
2、在Anaconda
新创建一个python环境,这里我安装的是python3.7。
打开anaconda的cmd,如下图
再输入以下命令
conda create -n python37 python=3.7
这句话的意思是创建一个python3.7的新环境,并且名命为python37。你也可以根据你的需要做更改。-n后面更新环境的名字,python=后面跟python的版本。
3、切换环境
刚开始的时候,为base环境(默认环境)
这时输入以下命令
activate python37
4、进行打包
剩下的步骤跟上面的打包步骤一样。安装对应的库,然后打包。
如果嫌麻烦也可将这个环境链接到pycharm中
这里我的pycharm
是2021版本的,其他版本的类似
Conda
环境envs
在里面找到你新建的环境,然后再进去找到python.exe文件。那个Conda可执行文件是默认的不用管。选择好解析器后,我们就可以开始安装模块了。然后再pycharm的终端中打包后的exe文件就可以放到win7中运行了。
如果直接双击exe程序,发现程序运行完了直接就退出,如果报错的话,连报错信息都来不及看就退了
打开cmd命令行,将exe文件拖拽到命令行中,然后按回车执行,就不会退出了