python遇坑记(一)pyinstaller_sssdal19995的博客-程序员秘密

技术标签: python  

pyinstaller 坑点:

  1. python 3.8 与 pyinstaller 3.5不兼容
  2. pyinstaller 打包opencv2程序为exe后没有响应
  3. pyinstaller 打包后的GUI界面中使用多线程/多进程的时候界面会重复出现多个(和线程个数相同)

python 3.8 与 pyinstaller 3.5不兼容

当前pyinstaller 只支持到3.7版本python,如果当前使用python版本超过3.7,有2种解决方案:

  1. 降低本地编译器python版本

  2. 使用开发版pyinstaller,安装开发版pyinstaller命令如下:

    pip instal https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz
    

pyinstaller 打包opencv2程序为exe后没有响应

pyinstaller打包exe的时候不会自动给opencv2的程序打包到exe中,所以需要手动添加依赖

  1. 找到项目中所依赖的dll

    • pycharm的话可以到项目路径\venv\Lib\site-packages\cv2 下找到对应的dll文件

    • 使用环境变量的python可以到PYTHON_HOME\venv\Lib\site-packages\cv2 \

      如:

      ​ C:\Program Files\Python37\Lib\site-packages\cv2

  2. 在代码中加上下面这行代码

    import ctypes
        try:
            temp = ctypes.windll.LoadLibrary('opencv_videoio_ffmpeg420_64.dll')
        except:
            pass
    
  3. 将dll文件拷贝到打包文件同级目录

pyinstaller 打包后的GUI界面中使用多线程/多进程的时候界面会重复出现多个(和线程个数相同)

原本这个问题是在使用多进程情况下出现的,但是当开发环境切换为多线程后此问题解决。

之所以将这个问题归纳到pyinstaller坑点的原因是因为当它打包后这个问题再一次出现!!!


目前尚未找到解决方案

pyinstaller 的常用参数

-F 表示生成单个可执行文件
-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
-p 表示你自己自定义需要加载的类路径,一般情况下用不到
-i 表示可执行文件的图标
-c 使用控制台,无窗口
-D 创建一个目录,里面包含exe以及其他一些依赖性文件
-h 来查看参数

备注:尽量不要使用python来做exe 会出现一大堆奇怪的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sssdal19995/article/details/106091235

智能推荐

Java实现验证码验证功能_weixin_34268753的博客-程序员秘密

Java如何实现验证码验证功能呢?日常生活中,验证码随处可见,他可以在一定程度上保护账号安全,那么他是怎么实现的呢?Java实现验证码验证功能其实非常简单:用到了一个Graphics类在画板上绘制字母,随机选取一定数量的字母随机生成,然后在画板上随机生成几条干扰线。首先,写一个验证码生成帮助类,用来绘制随机字母:import java.awt....

DCL单例模式中的volatile解析(含图解)_dcl volatile_超大仙在努力的博客-程序员秘密

对不清楚单例模式的小伙伴可以参考我的另一篇文章:八种单例模式使用,最全单例模式!(优缺点分析)在Java中单例模式存在这么一种情况如下:/** * DCL双锁校验 * 线程安全 * volatile关键字用于防止指令重排序 */class Singleton { private static volatile Singleton singleton; private Singleton() {} public static Singleton getIn

游标修改和删除操作_删除游标的命令_wen_demon的博客-程序员秘密

游标修改和删除操作是指在游标定位下,修改或删除表中指定的数据行。这时,要求游标查询语句中必须使用FOR UPDATE选项,以便在打开游标时锁定游标结果集合在表中对应数据行的所有列和部分列。为了对正在处理(查询)的行不被另外的用户改动,ORACLE 提供一个 FOR UPDATE 子句来对所选择的行进行锁住。该需求迫使ORACLE锁定游标结果集合的行,可以防止其他事务处理更新或删除相同的行,直到

找工作再也不愁之面试题全覆盖-Java基础篇_墨家巨子@俏如来的博客-程序员秘密

一.JavaSE 部分基础篇Java中基本数据类型有哪些?byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。short:16位,最[大数据]存储量是65536,数据范围是-32768~32767之间。int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。float:32位,数据范围在3.4e-45~1.4e38,直接

百鸡问题扩展-N鸡问题_ 盖世嘤雄 嘤嘤嘤的博客-程序员秘密

2百鸡问题扩展-N鸡问题N元钱买N只鸡,公鸡每只5元,母鸡每只3元,小鸡1元3只,N元钱必须刚好买N只鸡,而且鸡必须整只买,不能劈开买。有几种买法呢?这就是N鸡问题。输入格式:在一行中输入一个正整数N。(N<500)输出格式:在一行中输出两个整数cs,中间用一个空格隔开,表示N元钱买N只鸡共有c种买法,且所有买法的公鸡数量之和是s。如果无解,则s为-1.输入样例1:100输出样例1:4 24代码实现:#include<iost...

随便推点

RocketMQ入门篇_rocketmq堆栈溢出_嫉妒使我堆栈溢出的博客-程序员秘密

本次学习版本RocketMQ-4.4运行系统:Centos7x64运行环境:jdk1.8(openJdk存在兼容性问题)RocketMQ入门初识RocketMQ快速开始初识RocketMQRocketMQ底层是使用java开发的消息队列-先进先出的数据结构,对比现在其他集中消息队列,其作用是为了在应用层面进行解耦,流量削峰,流量分发RocketMQ虽然有以上优点,但是其实也增加了系统的维护成本,其缺点也很明显,如系统可用性降低(MQ挂了),系统复杂度提高(消息没有被重复消费,消息没有被消费等)

Fiddler_The_kindness的博客-程序员秘密

1. Fiddler简介1.1 简介Fiddler是位于客户端和服务器之间的代理,也是目前最常用的抓包工具之一。它能够记录客户端和服务器之间的所有请求,可以针对特定的请求,分析请求数据,设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器。1.2 功能能够监听http/https的流量,可以截获从浏览器或者客户端软件向服务器发送的http/https请求;对截获之后的请求,我们还能够查看请求中的内容;伪造请求。不仅可以伪造客户端的请求,还能够

低功耗蓝牙开发知识:服务名称及ID_0000180f-0000-1000-8000-00805f9b34fb_福州司马懿的博客-程序员秘密

转自 http://www.qdac.cc/?p=3363//基础ID服务名称:Base GUID 服务编码:{00000000-0000-1000-8000-00805F9B34FB}// GATT 配置服务名称:GAP 服务编码:{00001800-0000-1000-8000-00805F9B34FB} 服务名称:GATT 服务编码:{00001801-0000-1000-8000-0080

Android 使用MediaPlayer播放assets或者raw目录的音频文件_暴走邻家的博客-程序员秘密

不废话,需求:当接收到推送消息时,播放apk自带的声音,怎么办?首先接入极光推送,我前几篇文章已经讲了,不会的自己去看。在MyReceiver里的public void onReceive(Context context, Intent intent)判断消息类型,然后使用MediaPlayer播放assets或者raw目录的音频文件。if (JPushInterface.ACTI...

线段树与树状数组_树状数组和线段树的优势_阿言在学习的博客-程序员秘密

1.线段树 线段树相对于树状数组较为灵活,但比树状数组的速度会稍微慢一点,且空间是四倍的树状数组。线段树的思想是,每个结点都是一个结构体{l,r,sum},表示l到r区间内的总和,灵活就灵活在这个总和,因为也可是这个区间最小值,最大值等,线段树一般有四个函数如下:void pushup(int u){ tr[u].sum = tr[u << 1].sum + tr[u << 1 | 1].sum;}int build(int u,int l,int r).

SAP ABAP实用技巧介绍系列之如何创建Maintenance view_sap maintenance status_汪子熙的博客-程序员秘密

Created by Jerry Wang, last modified on Apr 18, 20141. Create a database table with type C( Customizing table ):field 如下:点击icon创建foreign key:选择yes:在自动生成的proposal window里选copy:最后生成forei...

推荐文章

热门文章

相关标签