PythonPyqt5项目开发完成后如何使用pyinstaller打包——以Pycharm编辑器为例(目前为止最正确的版本,成功打包日期为2020.11.26)

(请先看置顶博文)本博打开方式,请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净

最近用Python开发了一个可视化界面,开发过程如鱼得水,几乎没有BUG出现(项目简单)。但是在临近交付时发现,打包这个项目有点令人发愁。不过,一切难题最终被我“斩于马下”(踩过众多坑的我,今天就给大家重现一下我是怎么掉进坑里的!)

为了方便大家阅读,我先介绍打包过程,然后再介绍我出现的问题和打包心得:

一、打包

能看到这篇博问的同学想必是通过百度搜索pyinstaller如何打包Python项目、Python程序、Pyqt5程序进来的,那么我们就不多介绍pyinstaller这个打包程序了。在这次打包过程中,我使用的pyinstaller版本为4.0,而不是最新的4.1版本(实践过程中觉得pyinstaller4.1版本有坑,天坑!)

第一步  安装pyinstaller 4.0

使用Terminal或者在Setting->Project Interpreter添加:

1、   Terminal方法:需要输入的命令行如下所示

pip install pyinstaller==4.0

2、Setting->Project Interpreter中设置

第二步 拷贝主程序到项目文件的Lib路径下

主程序就是指明整个项目是从哪开始运行的程序,尤其是包含下图代码的,那一定是主程序了(你自己写的代码,主程序是哪个py文件你还不知道?)。那么就有好奇宝宝问了,我自己的主程序在原来位置好好的,为什么还需要复制到项目文件的Lib路径下?这是因为Lib文件下的site-packages里有我们的pyinstaller,我们在使用该工具时,得让他找的到我们要打包的程序。如下图所示,我已经把main_code.py复制到Lib文件夹里了。(是Lib文件夹,不是Lib、site-packages)如果你为自己的程序设计了图标,同样的道理,把图标文件(****.ico)也要复制到Lib文件目录下。

            

第三步 在Pycharm的Terminal中执行打包命令                                

打开Pycharm的Terminal,并进入到lib目录下,使用的命令为:“cd lib”,如下图所示:

接下来,开始我们的打包,需要的打包命令有两种,分别有不同的效果,建议大家按照我介绍的顺序都用一下,先介绍第一种,其中有-D和-i选项,:

pyinstaller -D main_code.py -i cat.ico

-D:打包 Python 程序为一个文件夹
-i:生成图标,只适用于 Windows 平台(没有图标就不用加“-i cat.ico”)

       使用这个打包命令打包好的程序在运行时会出现“窗口控制台”黑框,如下图所示。如果你的代码无法正常运行(在Pycharm里可以运行,不代表打包后的exe程序可以流畅运行),窗口控制台就会出现错误提示,也相当于一个DeBug的过程。所以,在此我建议打包程序的同学,先运行这个命令,等到一切正常后,再使用第二类“命令”。值得注意的是,如果打包好的程序无法顺利运行,这个黑框就会一闪而过,我们根本看不清错误提示。我也遇到了这个问题,我使用录频软件,录制了整个过程,放慢速度后才看清错误提示,最终解决了BUG。以下是打包命令从输入到打包成功的Terminal截图,由于项目路径不同,所以仅供参考!打包完成后,有一些程序需要读取的文件比如Excel文件、图片等,一定要把这些文件全部复制到“dist\main_code”文件里。我打包好的exe程序位置是“\Lib\dist\main_code\main_code.exe”,所以我将程序所需要的文件都放在了和“main_code.exe”相同的目录下。大家可以以我为例,对照着操作。对了,我使用的是相对路径。另外,如果按照我介绍的步骤进行打包,就不要再参考其他的资料或者书籍了,防止不兼容。

第二种命令:

pyinstaller --noconsole -D main_code.py -i cat.ico

其中--noconsole就是取消“窗口控制台”黑框的命令选项,这个命令是等到程序一切正常后才使用的。所以我先前就说了,一定要按照我介绍的顺序打包两次,这样才可以保证打包的成功率。下图是使用第二种命令打包成果的Terminal截图。

同理,也需要将exe程序所需要的图片、excel等文件复制到和exe同样的目录下。

二、踩过的坑


1、部分模块版本高,无法兼容或自身存在BUG。

出现问题的模块或包为:Pyqt5、pyinstaller、sumpy。在主程序开头,我已将上述中的二者导入(pyinstaller是打包工具,不是环境),但是在运行时,总是报错,其中就包含numpy1.19.4。如果你也出现与numpy相关的报错信息并且环境恰好是1.19.4的版本,那么我建议你使用如下命令降低numpy版本。

先卸载原先的1.19.4版本,在Terminal里输入以下命令:

pip uninstall numpy==1.19.4

随后安装低版本 1.19.3

pip install numpy==1.19.3

或者也可以在Pycharm的Setting里修改,用减号移除包,用加号增加所要的包。如下图1、图2所示,可进行包的增删以及包版本的选择。

                                                                                                         图 1

                                                                                              图 2

Pyqt5也出现了问题,我仿照numpy的处理方式降低了版本,打包程序就运行的顺畅多了。pyinstaller也是同样的道理。

2、自身代码问题

我使用的编辑器是Pycharm,运行代码时没有任何问题,打包也打包成功了,就是在运行exe文件时提示“exit”没有声明。我反复观察代码,后来是发现代码里有一处使用“exit”不规范导致的,更改后,重新打包,exe程序成功运行!所以就如我上面说的,编译器不报错,不代表打包成功后的程序能顺利运行。

3、与程序相关的文件(如图片、Excel文件等)

 上文也提到,在打包完成后,要把相关文件全部放入与可运行程序同一目录文件夹下,如果你依赖的文件在打包之前就在一个文件夹A里,那么把A复制,粘贴到与exe程序同一文件夹“dist”内。与路径相关的还有在编写代码时使用的是相对路径还是绝对路径,我这里使用的是相对路径。

4、打包程序只需要打包主程序

打包主程序即可,打包软件自动会把依赖的模块或包打包进去,比如我在此次开发过程中用了Pyqt5。pyinstaller打包main_code.py时,自动将Pyqt5等模块打包进去,无需我们一一指定。 

5、一条道走到黑

 在踩坑过程中,我试验了百度、CSDN上能查到的各种方法,不同情况使用的命令不同,程序所需文件复制到的位置也不同,大脑一片混乱。我在打包过程中还在思索,就一个简简单单的打包过程为啥这么复杂,网上教程为何都不适用,但是功夫不负有心人,我最终打包成功!所以,大家千万不要像我一样(东拼西凑),静下心来,把我这篇文章看完,一步一步去打包。打包成功了“收藏、关注、点赞、转发”,打包不成功,你私信我,我尽量帮助你解决问题。

最后附上我使用Python模块的版本搭配,希望对大家起到一个参考的作用。

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

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

相关文章

十一、Python第十一课——用户输入和另一种循环(While)

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 学了这么久的Python,大家肯定会好奇,不是说机器学习吗?不是人机交互吗?不是人工智能吗?怎么我学了Python都十…

如何让新创建的Python文件自动生成作者信息等内容(以Pycharm为例)

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 打开Pycharm软件后,点击“File”,然后点击“Settings”,就会出现下面截图界面:然后按照箭头所指,在对应位置…

如何将谷歌浏览器的背景色(包括显示的网站界面等)全部调为黑色?2020.12.28

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 因为电脑显示器正对窗户的原因,平时为了透气通风不能使用遮光帘,所以我将整个电脑的所有软件的主题色设为黑色,这样能降低一些光的…

Windows 10如何消除文件夹右上角的“相对箭头”?

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 整理笔记本电脑时发现&#xff0…

目标检测第1步:如何在Windows 10下安装MiniConda?

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 目录 一、Conda是什么&#xff…

十二、Python第十二课——函数

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 (请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 目录 (请先看置顶博文&#xff…

目标检测第2步:如何在Windows 10下安装Anaconda?

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 想要学习目标检测的朋友可能会发…

目标检测第3步:如何在Windows 10系统下安装CUDA(更新时间2022.03.22)

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 目录 一、自检 1、查看PC是否…

目标检测第5步:如何在Windows 10系统下,搭建YOLOv5(5.0)环境?保姆级,没有人比这个更详细了(更新时间2022.3.22)

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 目录 一、安装Anaconda或Minic…

如何将Word与Endnote再次相互关联?

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 Endnote是每一个科研人员都接触…

十三、Python第十三课——类(包含对类的相关概念的理解,这一文的附录让你彻底明白类和对象)

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 (请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 一、类和对象 1、类 2、对象 二、类的创建和实例…

十四、Python第十四课——文件和异常

(请先看这篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 如果看完这篇博文,你的问题还是没有解决,那么请关注我的公众号,后台发消息给我吧,当天回复&#x…

目标检测第6步:YOLOv5(5.0)如何在Colab中训练自定义数据集?(更新时间:2022.3.22)

(请先看这篇文章:本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客) 如果看完这…

十五、Python第十五课——测试代码

(请先看这篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 也许你听过软件测试?编写函数或类时,可以为其编写对应的测试代码。通过测试,可检验代码是否能够按照编写意图工作。在…

Windows 10环境下如何安装CMake?(更新时间:2021.9.13)

(请先看这篇文章:本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客) 1、下载Cmake 下…

Windows 10环境下AndroidStudio安装教程(内含如何配置Http Proxy)

(请先看这篇文章:本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客) 一、AndroidStudi…

如何将Android Studio卸载的干干净净?

(请先看这篇文章:本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客) 1、打开控制面板&…

Android Studio编译后运行按钮还是灰色的解决方法

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 安装配置好AndroidStudio之后&am…

OpenCV安装教程

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 1、下载 下载地址&#xff1a…

WordExcel使用小技巧(1)—— 打对勾或打叉

(请先看这篇文章: ​​​​​​​ 本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-C…