热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python利用pyqt5所写的gui利用pyinstaller和cxfreeze打包exe遇到的坑!

本文python是3.5pyqt5win7(和win10比差别不大)pycharm社区版我的python程序不仅加载了qt的模块还引入ctypes模块

本文python是3.5  pyqt5  win7(和win10比差别不大) pycharm社区版

我的python程序不仅加载了qt的模块还引入ctypes模块,加载了windows的动态库.dll 文件。

关于python的安装和pyqt5的安装不在这里说明了,其他的博客写的已经很多了。这里可以参照下面的博客:

https://www.cnblogs.com/dalanjing/p/6978373.html


1先说利用pyinstaller的坑

首先我运行程序没问题,然后在主程序.py文件下执行 :

F:\code\python\2>pyinstaller -F -w --paths=C:\python3.5\Lib\site-packages\PyQt5\Qt\bin --paths=C:\python3.5\Lib\site-packages\PyQt5\Qt\plugins RUN.py

其中第一个paths=*****所加的是pyqt5模块的路径,每个人不一样。第二个是本程序中加载的window .dll的库。

结果报错:

3983 INFO: Analyzing F:\code\python\simulate_camera01\RUN.pySyntax error in F:\code\python\simulate_camera01\RUN.pyFile "c:\python3.5\lib\tokenize.py", line 397, in find_COOKIEraise SyntaxError(msg)File "", line NoneSyntaxError: invalid or missing encoding declaration

很奇怪哎,各种百度但是没有找到和我这么相对的,但是基本都是编码相关的,关键也没有说哪个文件的问题。只是说语法错误:无效或者丢失编码申明。另外,pyinstaller仅仅支持文件为utf-8的编码,所以题主利用pycharm设置整个工程都是utf-8格式:

结果还是会报错~~~!!!!!!!!!!!!!!!!!!!!

所以题主就在这里放弃用这个工具打包了。转战cx_Freeze


2再说cx_Freeze安装的坑:

开始的时候我的python版本是3.7.1的但是怎么也安装不上,说是没有合适的。后来题主无奈之下换了python,换成python3.5

这次是可以安装的,但是!!我参照下面博客做了,却没有安装成功,:

https://blog.csdn.net/Geoffrey_Zflyee/article/details/78784601

利用cmd到python的scripts目录里面执行:cxfreeze -h

提示:不是内部或外部的命令,也不是可运行的程序

各种百度,说是因为scripts目录下执行相关指令该指令整个目录路径不能有空格!而题主的python是安装在C:\Program Files (x86)下的,中间有空格,无奈之下卸载python重新安装,直接安装在C盘根目录。再在相关scritps目录cmd运行:cxfreeze -h 还真的可以了:如下图:

然后再在python主程序根目录下运行:

F:\code\python\2>cxfreeze RUN.py

提示错误:这次提示的错误还是编码错误,但是会指出文件:

我那个文件没有申明编码。可是我之前pycharm明明都设置为utf-8了。无奈之下,我单独利用记事本打开刚才那个文件,最后发现是ANSI编码,重新保存utf-8。

这时候我突然想到,刚才pyinstaller会不会由于这个文件呢?


3再说pyinstaller打包完的坑

于是我又在刚才根目录运行:

F:\code\python\simulate_camera01>pyinstaller -F -w --paths=C:\python3.5\Lib\site-packages\PyQt5\Qt\bin --paths=C:\python3.5\Lib\site-packages\PyQt5\Qt\plugins RUN.py

结果显示:

居然成功了!!!!!!!!!!!!!!!!!

然后我运行程序,注意~~这里运行直接在dist里面点击exe文件是不对的,会出现可能出现的错误,界面虽然能打开,比如直接死掉。在运行程序之前一定要把相关的程序所需要的资源放在同一个根目录~~~~

但是,题主这个程序无法实现网络传输,具体原因不清楚,是可以跑起来的~~中间不知道哪里有bug,暂时没照出来~

所以无奈之下,用cxfreez试试吧~~切换到程序目录:

F:\code\python\2>cxfreeze RUN.py --target-dir F:\code\python\2\dist1\

输出在dist1里面,

然后把所有相关资源文件放在一起,包括程序所需要的dll文件夹。

果然可以运行!!!!!目前测试没发现bug~

感觉是工具的问题,cx_freeze更加稳定一些!!


推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Windows 7 部署工具DISM学习(二)添加补丁的步骤详解
    本文详细介绍了在Windows 7系统中使用部署工具DISM添加补丁的步骤。首先需要将光驱中的安装文件复制到指定文件夹,并进行挂载。然后将需要的MSU补丁解压并集成到系统中。文章给出了具体的命令和操作步骤,帮助读者完成补丁的添加过程。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了包的基础知识,包是一种模块,本质上是一个文件夹,与普通文件夹的区别在于包含一个init文件。包的作用是从文件夹级别组织代码,提高代码的维护性。当代码抽取到模块中后,如果模块较多,结构仍然混乱,可以使用包来组织代码。创建包的方法是右键新建Python包,使用方式与模块一样,使用import来导入包。init文件的使用是将文件夹变成一个模块的方法,通过执行init文件来导入包。一个包中通常包含多个模块。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了在Python中使用getpass模块隐藏密码输入的方法,以保护用户的密码不被其他人员看到。同时还提到了在PyCharm中运行该命令无效的问题,需要在terminal中运行。 ... [详细]
author-avatar
IP-COM东莞办事处_426
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有