Python3.5+PyQt5下使用pyinstaller将 py打包成 exe所遇到的坑

技术标签: pyqt

我们使用PyQt开发出来GUI了,很重要的一步就是将它打包成可执行文件,便于他人的使用,今天就配置一下在windows下打包windows下的可执行文件(.exe文件)。

先看一下我使用的电脑的系统属性:

 

1.安装pywin

我是直接在官网上下载的,链接地址(64位):

https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/pywin32-220.win-amd64-py3.5.exe/download?use_mirror=jaist

其它位数的版本可以在这下载:

https://sourceforge.net/projects/pywin32/files/

下载完成后直接双击该文件,一直点击下一步直到安装完成。安装路径选择你pyqt的安装路径就好了。这个没有啥问题的。我的路径对于关系是这样的:

 

2.安装pyinstaller

方法一:使用pip安装的(不建议使用)

pip install pyinstaller

报了一个小问题:

 

那就升级一下pip,

 

继续安装

 

 

方法二:源码安装

直接去gitHub上下载源码,注意找合适的版本。我用的是3.3.1。然后cd到该目录下,

python setup.py install

安装好了如图:

 

至此,这个就安装的差不多了。

3.使用pyinstaller打包文件

cd 到你的项目文件里pyinstaller -[opts] xxx.py

这个地方只需要打包你的主文件就好了,至于你这个文件import了多少个其它其它文件,这个没有关系的。

可选的几个简答的opts有:

  -F, –onefile 打包成一个exe文件。  -D, –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)。  -c, –console, –nowindowed 使用控制台,无界面(默认)  -w, –windowed, –noconsole 使用窗口,无控制台-i ,image.ico -i表示图标,图标格式是.ico

打包一下我自己的py文件:

pyinstaller -w -F serial_gui_main.py

 

 

看一下我们的项目目录:

 

dist下面就有我们需要的可执行文件:

 

我们双击一下试试:我曹报错了

 

解决方法:这个还是很简答的,少了配置库文件:

我们添加环境变量:

 

位置就是:PyQt5的plugins文件夹所在位置。每个人的可能不一样。

删除掉刚才在项目里面生成的那两个文件夹:dist和build。继续:

pyinstaller -w -F serial_gui_main.py

在点击生成的.exe。成功了:

 

至此,我在自己的电脑上是没有任何问题了。在别人的电脑上还没有测试。

但是坑还是继续的:

这是一个常见的错误

 

这个一般是pyinstaller的版本有问题,一般在是gitHub上下载3.4的版本就会出现这个问题,按理说最新的版本是没有啥问题的,但是确实这个路径不对。具体怎么配置这个路径,我也一直还没有搞出来,最后不得已换了版本。有做出来的,欢迎留言,我们互相学习一下。

2.还有的会出现这个错误:

 

这也是一个恶心的错误。同样的环境在,win7上打包就会出现这个问题。具体啥情况,我还是没有搞出来,最后使用了win10。我也是醉了。

可能这个打包还有问题,只是现在还没有发现,等我在好好试试了,要是还有问题,我再继续发文了。

 

 

更多的内容请关注头条号:小5嵌入式。

来源:网络


智能推荐

基于anaconda下的环境将py文件打包成exe

文章目录 **对应环境 在该环境下安装pyinstaller 进入py文件所在的目录 解决报错 添加图标 **对应环境 在该环境下安装pyinstaller 进入py文件所在的目录 解决报错 第一次尝试打包出现如下错误 卸载出错包即可解决 成功打包 添加图标 这是锦上添花版,命令为-i + XXX.icon,最终效果图如下!...

在python3.6环境下将py文件打包成exe程序

下载pyinstaller 采用命令行操作的办法 在cmd命令行中,输入代码: [python] view plain copy pip install pyinstaller  或者采用更新、升级的方法: [python] view plain copy pip install --upgrade pyinstaller&nb...

将python3.6软件的py文件打包成exe程序

转载地址:https://www.cnblogs.com/zeze/p/9025150.html   下载pyinstaller pyinstaller 改变图标 pyinstaller -F --icon=my.ico xxx.py 采用命令行操作的办法 在cmd命令行中,输入代码: 1 pip install pyinstaller   或者采用更新、升级的方法: 1 pip ins...

pyinstaller模块实现将python脚本.py文件打包成.exe文件

pyinstaller模块实现将python脚本.py文件打包成.exe文件 如何让一个没有任何编程基础的小白快速执行程序员给的python脚本又不需要配置python环境呢,pyinstaller模块可以帮你轻松解决这个问题,废话不多说,直接上干货啦! 第1步:程序员需要在个人电脑上配置python环境和pip环境(大家都懂的) 第2步 打开dos窗口 windows+r键打开运行窗口后输入&l...

用pyinstaller将Python项目中多个.py文件打包成.exe可执行文件

计算机是Windows 7旗舰版  32位操作系统。 Anaconda3,32bit版本 python3.7 在pipenv虚拟python环境下利用pyinstaller打包。 虚拟环境所在路径如下:源文件为main.py 和 wafertab.py 执行以下命令进行多文件打包: pyinstaller -F -w main.py --hidden-import wafertable....

猜你喜欢

DNS轮询怎么实现?

https://yq.aliyun.com/articles/43118 摘要: 大多域名注册商都支持多条A记录的解析,其实这就是DNS轮询,DNS服务器将解析请求按照A记录的顺序,逐一分配到不同的IP上,这样就完成了简单的负载均衡。 优点 基本上无成本,因为往往域名注册商的这种解析都是免费的; 部署方便,除了网络拓扑的简单扩增,新增的Web服务器只要增加一个公网IP即可。 大多域名注册...

jmeter进行http压力测试(图文小教程)

下载地址:http://jmeter.apache.org/download_jmeter.cgi JMeter基于Java开发,需要系统有安装JDK环境。解压后进入bin目录,点击jmeter.bat 1、添加线程组: 测试计划 -> 添加 -> Threads(User) -> 线程组,添加后进入如下界面: 线程数:表示将模拟多少个用户进行测试。 Ramp-Up Period...

CVE-2017-11882漏洞分析与利用

(一次大作业,比较啰嗦 ,见谅) 漏洞介绍 2017年11月14号,微软推送了常规的安全更新,其中就包括CVE-2017-11882的安全更新,当时还引起了不小的关注,之后Github上也公布了许多POC及对应的漏洞利用程序。 仅仅从CVE-2017-11882的漏洞利用效果来看,它可以通杀Office 2003到Office 2016的所有版本,并且整个攻击环境的构建非常简单,效果又非常的好。例...

《数字图像处理》Learn about Superpixel 超像素介绍 非深度学习方法

Learn about Superpixel 超像素 1 超像素简介 前些年图像分割领域用的较多的“分水岭算法”,在作业中我自己学习了另外一种目前在图像分割领域用的较多的算法——超像素分割算法,通过查阅“超像素”的定义以及基于超像素的图像分割的算法的工作步骤,我熟悉了这一领域,最后我通过阅读SLIC(simple linear...

vue报错:“ReferenceError”: items is not defined

我们在vue开发过程中,经常会遇到Error in v-on handler: “ReferenceError: * * is not defined” 这是因为我们在开发过程中,items未定义,或者相应的组件还没有导入,...

问答精选

How can I take first word in comma separated string using regular expression

I want to take the first comma seperated value from that string. I used "\b.*\;" regex to take "Lines.No". But the result is thanks. First, anchor the search at the start of the st...

How to get name of the selected checkbox value from id?

I have rendered checkboxes and I have rendered selected checkboxes values like below: My problem is, it displays id of selected value. But I want name(label) of selected value . So what should I do? Y...

If first param is true, then must pass second param in function

I have my custom Kotlin's function: It has one default param (isAsync) and one optional (vararg) callback param. I can call this function from java like this: Nice, it works. But, when I use this call...

I am having trouble getting a URL to switch in this windows forms program

The program has a label, two radio buttons, and a set of generated buttons from A-Z. There are two URLs I would like to use that have a text list of names. When You click a lettered button, the progra...

How can I output my ajax result into a php variable?

I am storing my Ajax result into a div element. This is working well: index.php: myajax.php: I would like to do something like: Is it possible to output the result instead of the div into a PHP variab...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答