【pyinstaller打包pyqt5编写的项目为exe(脱离环境可运行)】

目录

下载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

Guess you like

Origin blog.csdn.net/qq_45769063/article/details/121143884