【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 中cPickle学习二

写入: import cPickle as p shoplistfile data.data shoplist [meili,[current_account,[100000,1222],basis_account,[5555555,888]],qinshan,[current_account,[1089000,12292],basis_account,[55555955,888]],jiayou,[current_account,[10000,12292],basis_acc…

4.0 多线程基础篇

本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末如果觉得本文内容过长,请前往本人 “简书”4.0-1.1 进程 概念 : 进程是指在系统中正在运行的一个应用程序 (操作系统中每一个 APP 就是一个进程)  性质 : 每个进程之间是独…

【python pandas excel操作】

目录 1、打开Excel,获取不同sheet的名称 2、获取不同sheet的内容 3、 获取行数以及表头 4、对某一列的信息进行筛选 5、根据列号和索引号提取一行或者一列的数据 6、其他panda对Excel的操作 摘自:python对excel操作获取某一列,某一行的值…

线性期望(BUPT2015校赛.F)

将整体期望分成部分期望来做。 F. network 时间限制 3000 ms 内存限制 65536 KB题目描述 A social network is a social structure made up of a set of social actors (such as individuals or organizations) and a set of the relationships between these actors. In simp…

【pyqt5学习】——进度条progressBar

# 进度条 self.progressBar.setValue(0) # 设置进度条的最小值 self.progressBar.setMaximum(100) # 设置进度条的最大值 # 设置进度条当前值 self.progressBar.setValue((int(curindex/excelNum)*100)) 常用方法 方法值说明setRangeQProgressBar.setRange(min, Max)通过 setR…

弧焊 不同气体对焊缝的影响 100二氧化碳 15%氩气CO2混合

Ar含量提高后,相比原来的100%CO2成本会提高很多。 Ar的密度比CO2小,焊接的焊枪必须压的很低,如果焊接结构中有一些狭小区域,焊枪则无法到达。纯CO2气体保护焊,焊丝可伸出较长。 Ar属于惰性气体,焊接时…

Windows和Linux如何使用Java代码实现关闭进程

在用selenium做自动化测试时,由于各种不明原因,有时Chrome浏览器会出现假死的情况,也就是整个浏览器响应超时,本人脚本主要部署在Windows机器上,所以主要以Windows为主,浏览器为Chrome,即如下图所示 或者由…

【pyqt5学习】——下拉框comboBox

# 向下拉框中添加选型,具体为在下拉框第index1个选型设置为内容name self.comboBox.addItem(name,index1) # 将下拉框中所有的选项删除 self.comboBox.clear() # 根据索引获取当前的下拉框内容 index self.comboBox.currentIndex() text self.comboBox.itemText(i…

【文件处理】——Python pandas 写入数据到excel中

目录 1、创建一个新的excel表格 2、 获取写入excel的数据data 3、将data类型转换为pandas接受的类型 4、写入到excel中 5、保存excel 最终结果 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2021/11/9 23:18 # Author : linlianqin # Site : # File …

微软Visual Studio 2012软件功能介绍

对于从事.net程序开发的我们,都要用到C#依附的Visual Studio平台!Visual Studio是目前最流行的Windows平台应用程序开发环境。最新版本为 Visual Studio 2012 版本,基于 NET Framework4.5 。. Visual Studio 2012内置的测试工具可以帮助开发者打造高质量…

Spring Boot轻松理解动态注入,删除bean

2019独角兽企业重金招聘Python工程师标准>>> 我们通过getBean来获得对象,但这些对象都是事先定义好的,我们有时候要在程序中动态的加入对象.因为如果采用配置文件或者注解,我们要加入对象的话,还要重启服务,如果我们想要避免这一情况就得采用动态处理bea…

对象的深度克隆

最近在复习javascript,然而我的读书笔记,以及技术博客,已经转战cmd Markdown。所以这里就只写了一个对象的深度克隆方法: 这个克隆方法可以让我很深刻的了解到了js中,万物皆对象,对js有更深入的了解。转载于…

C/C++语言变量声明内存分配

[cpp] view plaincopy<span style"font-family: Verdana, Arial, Helvetica, sans-serif; ">一个由c/C编译的程序占用的内存分为以下几个部分</span> 1、栈区&#xff08;stack&#xff09;— 程序运行时由编译器自动分配&#xff0c;存放函数的参数值…

【pyqt5学习】——items view相关控件(list view、table view)

目录 list view——列表视图 table view——表格视图 list view——列表视图 PyQt5-高级控件使用&#xff08;QListView&#xff09; - ygzhaof_100 - 博客园QListView用于展示数据&#xff0c;子类是QListWidget。QlistView基于模型Mode&#xff0c;需要程序创建Model然后保…

【pyqt5学习】——containers相关控件(tab widget、scroll area、stack widget、tool box、MDI area、dock widget)

目录 1、tab widget 2、scroll area 2.1 使用方法 Step1.拖入QScrollArea ​Step2.改变widget控件布局 ​Step3.设置scrollAreaWidgetContents大小 3、Tool Box 4、Stacked Widget 4.1 案例展示 5、frame 6、MDI AREA 7、dock widget 7.1 悬浮状态 7.2 吸附状态 conta…

Java使用原子类进行多线程的 i++ 操作示例

2019独角兽企业重金招聘Python工程师标准>>> 使用AtomicInteger原子类进行 i 操作 可以有类似 synchronized 实现同步的效果。 原子操作是不能分割的整体&#xff0c;没有其他线程能够中断或检查正在原子操作中的变量。一个原子类型就是一个原子操作可用的类型&…

mybatis实战教程(mybatis in action)之二:以接口的方式编程

前面一章&#xff0c;已经搭建好了eclipse,mybatis,mysql的环境&#xff0c;并且实现了一个简单的查询。请注意&#xff0c;这种方式是用SqlSession实例来直接执行已映射的SQL语句&#xff1a;session.selectOne("com.yihaomen.mybatis.models.UserMapper.selectUserByID&…

Linux内核分析06

进程的描述和进程的创建 一&#xff0c;进程的描述 进程控制块PCB——task_struct &#xff08;进程描述符&#xff09;&#xff0c;为了管理进程&#xff0c;内核必须对每个进程进行清晰的描述&#xff0c;进程描述符提供了内核所需了解的进程信息。 struct task_struct数据结…

【pyqt5学习】——pyqt5中.qrc资源文件的创建与编写

目录 一、说明 二、安装pyqt5以及相关工具&#xff08;pyqt5、pyuic、pqrcc&#xff09; 三、创建.ui文件 1、选中文件右键-external-pyqt5 打开GUI设计界面 2、创建一个界面&#xff08;内含四个等大label框&#xff09; 3、CTRLS保存 4、找到ui文件&#xff0c;右键--e…