文章目录
0 前言
与C/C#等编译型语言不同(编译后直接生成可执行程序文件(后缀名为.exe)),Python作为解译型语言(不自动生成.exe),程序的运行必须有Python环境;而在缺少python环境的计算机上执行python程序,则需将其打包成.exe文件。打包方法及相关第三方库比较多,这里整理了4种Python打包.exe文件方法,本文选用Pyinstaller(较为常用且支持Linux,Unix等平台)对py文件进行打包。
如果直接采用一般情况(这里指非虚拟环境)打包,则将该环境下全部第三方库(无论是否在被打包文件中使用)都打包到程序文件中,会造成一定的资源浪费,进而通过搭建虚拟环境,在该环境中只保留被打包文件所依赖的第三方库可以有效减少exe占用空间。相关的第三方库依然有很多种,例如标准库venv,这里选用一种比较简单方便的构建虚拟环境的第三方库virtualenv,当然还有一些追求打包文件极致的“小”的办法可以参考该文。
如上所述,我们可以将相关第三方库直接安装到虚拟环境中,但这样做并不方便;通常情况下,我们将程序相关依赖迁移到虚拟环境中进行打包,这里用到pipreqs库。本文主要分为三部分,第一部分:简单介绍如上提到的三种第三方库的安装及简单使用,第二部分:完整展示单个py文件打包成exe文件的具体流程,第三部分:记录打包时可能遇到的问题以及解决办法。
这里主要简单介绍相关库的简单办法以求优先理解“如何将必要依赖迁移至虚拟环境打包”这一问题,后面会补充相关库更详细的使用方法介绍
1 相关第三方库的安装及使用介绍
这一步可以在非虚拟环境下直接安装pipreqs和virtualenv,在激活后的虚拟环境下安装pyinstaller。
1.1 pipreqs
一、安装
pip install pipreqs
二、相关命令简介
#导出项目依赖包
pipreqs . --encoding=utf8 --force
# “.” 指的是将导出依赖包的文件放在当前目录下
# “--encoding=utf8” 指的是存放文件的编码为utf-8,否则会报错
# “--force” --force 强制执行,当生成目录下的requirements.txt存在时强子覆盖
#导入项目依赖包
pip install -r requirements.txt
1.2 virtualenv
一、安装
pip install virtualenv
二、相关命令简介
#创建虚拟化环境
virtualenv ENV #在当前的项目中创建ENV文件夹,为当前项目的虚拟python运行环境
#激活虚拟化环境
source ENV/bin/activate
1.3 pyinstaller
一、安装(再次强调:在虚拟环境下安装即可,建议看完先第二节再操作)
虚拟环境中一定要有该库,新的环境里面一定一定要 pip install Pyinstaller
pip install pyinstaller
二、相关命令简介
pyinstaller -F Program_Name.py #最简单的用法,可以参照下表选择所需格式
-h,–help | 查看该模块的帮助信息 |
---|---|
-F,-onefile | 产生单个的可执行文件 |
-D,–onedir | 产生一个目录(包含多个文件)作为可执行程序 |
-a,–ascii | 不包含 Unicode 字符集支持 |
-d,–debug | 产生 debug 版本的可执行文件 |
-w,–windowed,–noconsolc | 指定程序运行时不显示命令行窗口(仅对 Windows 有效) |
-c,–nowindowed,–console | 指定使用命令行窗口运行程序(仅对 Windows 有效) |
-o DIR,–out=DIR | 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件 |
-p DIR,–path=DIR | 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径 |
-n NAME,–name=NAME | 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字 |
2 打包步骤(实例演示)
2.1 准备工作
这里需要准备一个临时文件夹(我的目录是C:\Users\Ryan\Desktop\TEST),准备好自己编写好的python程序(我的是PODD.py)放到TEST文件夹中。
2.2 cd命令介绍(小白专用)
cd(Change Directory)命令行是计算机操作系统中最重要也是最常用的命令,它可以帮助我们轻松地管理文件。首先按住"Win"+"R"键,输入cmd进入到dos界面,下面列举几个经常用到的命令。
#cd 进入到C盘目录下
cd C:\Users\Ryan\Desktop\TEST
#cd 进入到其它盘目录下
cd q:
cd Q:\stable-diffusion-webui-master
当然,你也可以先在文件管理器中找到相应位置,在目录处输出“cmd”点击“Enter”键达到相同效果。
2.3 导出项目依赖包
首先在python程序中添加pipreqs库的引用,不添加可能会报错
import pipreqs
利用cd命令进入到python项目存放路径
cd C:\Users\Ryan\Desktop\TEST
在该目录下执行
pipreqs . --encoding=utf8 --force
由此,我们可以在项目TEST文件夹中得到一个requirements.txt文件,文件内容包含了相关依赖的库名以及对应的版本号。
2.4 创建虚拟环境
返回TEST文件夹,创建虚拟化Python环境,取名为ENV(自己喜欢啥就叫啥)
打开TEST文件夹,可以发现多了一个名为ENV的文件夹,打开后可以看到有如下文件。更多
2.5 激活虚拟环境
将文件目录改为虚拟环境下的Scripts文件夹下
cd C:\Users\Ryan\Desktop\TEST\ENV\Scripts
直接输入
activate
见到(ENV)表示已成功激活虚拟化环境
2.6 导入项目依赖包
将2.3中导出的requirements.txt文件移动到…\TEST\ENV\Scripts\目录下
pip install -r requirements.txt
2.7 项目打包
在虚拟环境下改变目录到python程序目录
cd C:\Users\Ryan\Desktop\TEST
这个时候安装pyinstaller可以将该库仅安装在虚拟环境下
pip install pyinstaller
现在,就可以根据1.3中相关命令进行打包了,比如我这里将python程序(PODD.py)打包成为一个可执行程序(包含多个文件)的目录。这里选用了最简单的打包方法,通常情况采用先生成spec文件,再对spec文件打包。
pyinstaller -D PODD.py
INFO信息提示completed successfully表示打包完成
同时在TEST目录下生成build、dist和.spec三个文件(夹)
2.8 运行程序&删除多余文件
修改当前目录到可执行程序所在位置
cd C:\Users\Ryan\Desktop\TEST\dist\PODD
运行程序
PODD.exe
运行程序确认无误后我们可以将冗余的文件删除掉(除PODD文件夹外的所有文件)
3 可能出现的问题
3.1 参数设置有误造成的打包错误
错误描述:
解决办法:
仔细核查pyinstaller参数命令的大小写、字母等情况。
3.2 窗体控件绑定的相关文件导致出错
错误描述:
解决办法:
我这里的源码中用到了“FileOpen.png”这个图片作为按钮的图标,程序设置的图标读取应该为和python程序根目录下,故将该相关图片放到dist\POOD路径下即可解决该错误。
self.photo1=tk.PhotoImage(file=r"FileOpen.png")#示例化图标
self.Btn_Directory1=tk.Button(self.form1,
image=self.photo1,
text="浏览目录",
#compound=tk.LEFT,
command=self.SLCdir)#在窗体中添加按钮控件
3.3 其它问题
赶紧点赞、收藏起来吧!不然下次就找不到了💕