目录
下载pyinstaller库
0、pyinstaller语句介绍
1、单个py文件打包成exe
1)只有py文件
假设只有一个py文件:pyinstaller -F xxx.py
加上图标:pyinstaller -F xxx.py -i xxx.ico
取消命令行窗口:pyinstaller -F -w xxx.py -i xxx.ico
2) 不但有py文件,还有其他格式的文件
进入项目所在根目录
运行得到spec文件:pyi-makespec main.py
修改 spec文件
执行 pyinstaller -F main.spec命令
2、多个py文件打包成exe
1)方法一:pyinstaller直接运行得到
2)方法二:多步骤进行
(1)使用命令行窗口进入项目的根目录
(2)在改目录下执行pyi-makespec main.py(main.py是你的主入口文件)
(3)修改main.spec文件
(4)执行 pyinstaller -F main.spec命令
(5)在dist/main文件夹里面点击.exe文件
3、携带非py文件打包exe
1)同上述方法二所述
2)方法一+移动data文件夹
4、一些经验和技巧
5、参考链接
下载pyinstaller库
pip install pyinstaller
我这里是使用清华的镜像下载的,因为直接使用 pip install 速度会慢一点,使用国内的镜像网站那速度可蹭蹭的快啊。
pip install -i http://pypi.douban.com/simple/ pyinstaller
0、pyinstaller语句介绍
pyinstaller -F -w -i xxx.ico xxx.py -p x:\...\site_packages
- -F:将xxx.py文件打包成一个独立的可执行文件exe,exe文件名为xxx
- -w:运行exe时不会弹出命令行窗口,不加则在执行exe时会弹出命令行窗口
- -i:添加xxx.ico图标
- -p:添加环境site-packages文件夹绝对路径
1、单个py文件打包成exe
1)只有py文件
假设只有一个py文件:pyinstaller -F xxx.py
pyinstaller -F xxx.py
运行后会生成一个dist文件夹,文件夹内就是需要的exe文件
加上图标:pyinstaller -F xxx.py -i xxx.ico
在线生成透明ICO图标——ICO图标制作http://www.ico51.cn/
pyinstaller -F xxx.py -i xxx.ico
取消命令行窗口:pyinstaller -F -w xxx.py -i xxx.ico
在运行上述命令生成的exe会出现命令行,取消则运行:
pyinstaller -F -w xxx.py -i xxx.ico
或者:
pyinstaller -F mycode.py --noconsole
2) 不但有py文件,还有其他格式的文件
有时候可能需要和一些配套的文件进行打包,比如图像,TXT等,这时候按照下述进行
-
进入项目所在根目录
比如需要打包的文件为xxx.py,项目名为project,即project\xxx.py的结构
则在命令行通过cd ...\project 进入根目录
如下图假设就打包main,py文件为可执行文件exe,则是进入:bank中
-
运行得到spec文件:pyi-makespec main.py
假设文件为main.py,则运行:
pyi-makespec main.py
运行后会得到main.spec文件
-
修改 spec文件
刚开始main.spec文件打开后:data为空
1.要在第一行,也就是a = Analysis([‘main.py’])这里面添加你的所有的.py文件,注意是所有的而且只能是.py文件,第一个是代码你的入口文件。
另外假如.py文件不是与你的主入口文件main.py文件在同一个目录下,那么该文件要写绝对路径。
2.修改datas(放一些图片音频等文件),这里面是放非.py文件,这里是以元组的形式,(“文件夹的绝对路径”,“文件夹名”)注意这里不是写具体的文件名,而是文件夹。
下面是我修改过后的:
我这里data里面有一个.txt文件,像什么照片啦,音频啦同样的道理。
-
执行 pyinstaller -F main.spec命令
pyinstaller -F -w -i tubiao.ico main.spec
运行后会得到一个dist文件夹,文件夹里面又一个以main命名的文件夹,在mian文件夹里面找到exe即可
2、多个py文件打包成exe
1)方法一:pyinstaller直接运行得到
### pyinstaller 所有需要打包的py文件 -p 环境site-packages绝对路径
### 注意:py文件的路径需要以第一个py文件为准
pyinstaller -w -i data\\fa.ico firstUI_logic.py firstUI.py getFeathers.py nms.py operateUI.py operateUI_logic.py -p D:\softwares_install\Anaconda3\envs\Train\Lib\site-packages运行后会得到dist,在dist里面的firstUI_logic文件夹中找到exe文件即可
2)方法二:多步骤进行
(1)使用命令行窗口进入项目的根目录
我这里就是 进入到E:\ljl\bank。
(2)在改目录下执行pyi-makespec main.py(main.py是你的主入口文件)
执行完毕之后,会生成一个main.spec文件
(3)修改main.spec文件
刚开始main.spec文件打开后是
1.要在第一行,也就是a = Analysis([‘main.py’])这里面添加你的所有的.py文件,注意是所有的而且只能是.py文件,第一个是代码你的入口文件。
另外假如.py文件不是与你的主入口文件main.py文件在同一个目录下,那么该文件要写绝对路径。
2.修改datas(放一些图片音频等文件),这里面是放非.py文件,这里是以元组的形式,(“文件夹的绝对路径”,“文件夹名”)注意这里不是写具体的文件名,而是文件夹。
下面是我修改过后的:
我这里data里面有一个.txt文件,像什么照片啦,音频啦同样的道理
(4)执行 pyinstaller -F main.spec命令
在界面中输入 pyinstaller -F -w -i tubiao.ico pyexe.spec(-i 后面跟着的是exe程序的图标,最后跟.spec文件)
(-F:产生一个文件;-w:使用Windows子系统执行,不会打开命令行)
pyinstaller -F mycode.py --noconsole
还可以这样pyinstaller -F -w mycode.spec (-w就是取消窗口)
这时候会生成两个文件夹,build和dist。然后.exe文件就在里面,快点开看看吧。
(5)在dist/main文件夹里面点击.exe文件
运行后会得到dist,在dist里面的firstUI_logic文件夹中找到exe文件即可
3、携带非py文件打包exe
1)同上述方法二所述
2)方法一+移动data文件夹
- 运行方法一会得到dist文件夹,dist文件夹中会有一个firstUI_logic文件夹
- 将存放了非py文件的data文件移动到firstUI_logic文件夹下即可
注意:因为涉及到非py文件,所以在py文件编写的时候,涉及到引用这些非py文件时,需要对文件的根目录进行获取:
一般是先自动获取得到当前exe的根目录dirfile;
然后通过字符串拼接来得到非py文件的具体文件夹:dirfile + "\data\非py文件名"
4、一些经验和技巧
1)在编写时,尽量使用from xxx import xxx,而不是直接import xxx,然后通过xxx.xxx来使用。比如from cv2 import imread,和import cv2,前者只是导入了imread,而后者直接复制了cv2,导致后续打包的exe过大
2)根据以往的经验一般是使用【方法一+移动data文件夹+保留命令行窗口】方法来进行打包,成功率高,且通过命令行来进行exe运行,可以看到有什么异常进而进行修改
pyinstaller -i data\\fa.ico firstUI_logic.py firstUI.py getFeathers.py nms.py operateUI.py operateUI_logic.py -p D:\softwares_install\Anaconda3\envs\Train\Lib\site-packages
注意没有-w,保留了命令行窗口
3)有时候可能会出现导入包错误,可能在打包好的文件夹中对应的包位置缺少了相应的pyd文件,比如pyinstaller打包执行exe出现“ModuleNotFoundError: No module named ‘scipy.spatial.transform._rotation_group”
上述其实就是说明在打包完成的dist文件夹中的文件夹中对应的库中缺少pyd文件,需要补充上,具体见:
pyinstaller打包执行exe出现“ModuleNotFoundError: No module named ‘scipy.spatial.transform._rotation_group”_python_AI_fans的博客-CSDN博客https://blog.csdn.net/qq_45769063/article/details/112713682
.py文件转为.pyd文件_李鑫玉的博客-CSDN博客_python py转pydhttps://blog.csdn.net/qq_41007606/article/details/109565069
5、参考链接
【项目实战】——Python打包正装换底色代码为exe文件(可在其他无Python环境下运行)_python_AI_fans的博客-CSDN博客https://blog.csdn.net/qq_45769063/article/details/109128507