修复 OpenCV 依赖错误的小工具:OpenCV Fixer

使用 Nvidia 官方 Docker 镜像折腾 Stable Video Diffusion 的时候,发现 OpenCV 社区有一个古怪的 issue 需要手动解决,所以顺手写了一个能够自动修复的小工具。

以及,聊聊如何快速的发布一个 Python 软件包。

写在前面

如果你在使用 Python 生态的软件时,遇到了 module 'cv2.dnn' has no attribute 'DictValue' 的报错,可以试试看这个小工具。

当然,如果你想进一步确认是因为 OpenCV 引起的问题,可以尝试执行下面的命令:

python -c "import cv2; print(cv2.__version__)"

如果你收获的不是某个版本号,而是下面的报错日志,说明你的 Python 软件包存在需要修复的问题。

Traceback (most recent call last):File "<string>", line 1, in <module>File "/usr/local/lib/python3.10/dist-packages/cv2/__init__.py", line 181, in <module>bootstrap()File "/usr/local/lib/python3.10/dist-packages/cv2/__init__.py", line 175, in bootstrapif __load_extra_py_code_for_module("cv2", submodule, DEBUG):File "/usr/local/lib/python3.10/dist-packages/cv2/__init__.py", line 28, in __load_extra_py_code_for_modulepy_module = importlib.import_module(module_name)File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_modulereturn _bootstrap._gcd_import(name[level:], package, level)File "/usr/local/lib/python3.10/dist-packages/cv2/typing/__init__.py", line 168, in <module>LayerId = cv2.dnn.DictValue
AttributeError: module 'cv2.dnn' has no attribute 'DictValue'

这个问题在社区早些时候有被反馈(opencv/opencv-python #884),主要原因是在安装 numpy 时被带入一起安装的版本过旧 opencv 导致的兼容性问题。比较 Trick 的是我们并不能通过简单执行 pip install 来更新软件包,需要遵从帖子进行一些手动清理安装,才能将问题解决。

所以,我写了一个简单的开源小工具,来自动修正这个问题,项目开源地址在:soulteary/opencv-fixer。

下面讲讲如何使用这个小工具。

OpenCV Fixer

工具的使用非常简单,和使用普通的软件包一样,使用 pip install 来完成工具包的下载:

pip install opencv-fixer==0.2.5

软件的修复需要进行 OpenCV 的清理和更新下载,如果你访问 Python 官方的 PyPi 源比较慢,可以顺手更新软件源为国内的镜像:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

然后,执行下面的命令,就能够完成 OpenCV 的自动修复工作了:

python -c "from opencv_fixer import AutoFix; AutoFix()"

如果一切正常,你将看到类似下面的日志输出:

Uninstalling the following OpenCV-related packages: opencv, opencv-fixerSuccessfully uninstalled opencvSuccessfully uninstalled opencv-fixerFound opencv-python version is lower than 4.9, version=4.7.0Begin upgrade your opencv-python version to 4.9+.The folder /usr/local/lib/python3.10/dist-packages/cv2 has been removed successfully...

如果我们再次执行之前的测试命令,能够得到 OpenCV 的版本号,那么说明一切都修复正常啦:

# python -c "import cv2; print(cv2.__version__)"
4.9.0

当然,如果我们在 Docker 环境或者使用 root 用户执行,可能会收到下面的 warning 警告日志:

Install opencv-python-headless failed: WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

但其实是没有问题的,如果我们执行 pip show opencv-python-headless,能够看到软件已经被正确安装:

# pip show opencv-python-headless
Name: opencv-python-headless
Version: 4.9.0.80
Summary: Wrapper package for OpenCV python bindings.
Home-page: https://github.com/opencv/opencv-python
Author: 
Author-email: 
License: Apache 2.0
Location: /usr/local/lib/python3.10/dist-packages
Requires: numpy, numpy, numpy, numpy
Required-by: 

其他:快速发布一个 Python 软件包

想要快速发布能够被 pip install 安装的 Python 软件包,其实很简单。

首先,需要注册一个 PyPi 账号,注册完毕后,会要求我们验证邮箱有效性。再完成邮箱验证后,我们需要在账号中配置“二步认证”,从而开启获取 API Token 的权限。

获取的 API Token 页面下方,有可以一键复制的配置文件,内容类似下面这样,我们可以保存起来,稍晚使用:

[pypi]username = __token__password = pypi-一长串Token

如果你是 macOS 用户,在不配置或者更新本地 Python 环境的情况下,如果想直接发布一个软件包,可能会比较麻烦。但是如果使用 Docker 就会变的简单许多:

cd package-dirdocker run --rm -it -v `pwd`:/app python:3.10 bash

比如,使用上面的命令,可以快速的将软件包里的内容映射到 Python 3.10 容器的 /app 目录,方便我们用一个完备、干净的环境做软件发布。

发布过程中,我们可以配置软件源和完成依赖软件包的下载:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simplepip install packaging twine

完成基础依赖后,执行下面的命令,可以将我们之前获得的 API Token 保存为可以通过 PyPi 源认证的配置文件。

cat << EOF > ~/.pypirc
[pypi]username = __token__password = pypi-一长串Token
EOF

一切就绪之后,我们执行下面的命令,完成 Python 软件包的构建和发布就完事啦:

python setup.py sdist bdist_wheel
twine upload dist/*

最后

好了,这篇文章就先写到这里。

–EOF


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2024年01月07日
统计字数: 3707字
阅读时间: 8分钟阅读
本文链接: https://soulteary.com/2024/01/07/fix-opencv-dependency-errors-opencv-fixer.html

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

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

相关文章

kafka-zookeeper集群架构可视化监控,Kafka-Eagle安装部署

1、简介 在 kafka-zookeeper 集群架构下&#xff0c;zookeeper 管理 kafka 的元数据信息&#xff0c;如何监控这些信息&#xff0c;并且能够直观查看和管理 kafka 一些具体 主题、分区等参数信息&#xff0c;是非常便于开发的&#xff0c;因此 Kafka-Eagle 是一个为监控 kafka …

git 常用命令 rebase发生冲突时 ☞ 撤销rebase

场景&#xff1a;rebase发生冲突时 ☞ 撤销rebase git rebase --abort git reset --hard HEAD git reset --hard 8ec554Further Reading &#xff1a;Git常用命令汇总

智慧医院预约及支付平台—平台系统功能介绍

智慧医院APP(大众版) 系统概念 智慧医院APP(大众版)是面向居民大众,提供基于居民健康档案移动端的服务, 能够为居民提供全流程的医疗就诊服务支持,包括便捷的就医帮助,精确高效的健康管理服务,缓解居民的看病难、看病贵的问题。 功能清单 功能类别 功能模块 功能说…

一个奇怪的Oracle SQL Loader错误

今天在用Oracle SQL Loader导入文本文件时&#xff0c;发生了一个奇怪的问题&#xff0c;就是&#xff1a;我的输入文本文件dbim.dat放在oracle用户根目录&#xff08;$HOME&#xff09;下时&#xff0c;导入不成功&#xff1b;而将其放在/u01/app/oracle目录下时&#xff0c;则…

基于机器视觉的车牌检测-边缘检测因子的选择

车牌检测概述 车牌识别在检测报警、汽车出入登记、交通违法违章以及移动电子警察方面应用广泛。车牌识别过程为&#xff1a;首先通过摄像头获取包含车牌的彩色图像&#xff1b;然后进行车牌边缘检测&#xff0c;先粗略定位到车牌位置&#xff0c;再精细定位&#xff1b;最后根…

面试经典150题(67-71)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第三十四天&#xff09;完成了5道(67-71)150&#xff1a; 67.&#xff08;114. 二叉树展开为链表&#xff09;题目描述&#xff1a; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#…

[AutoSar]基础部分 RTE 05 Port的实例化和初始化

目录 关键词平台说明一、端口类型二、端口的实例化2.1 创建application port2.2 实例化 三、初始化 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 一、端口类型 如下图所示&am…

MvvmToolkit的使用

背景&#xff1a;MvvmLight不更新了&#xff0c;用Toolkit代替 1、首先下载好社区版本的NuGet包 2、ViewModel中需要继承ObservableObject&#xff0c;查看ObservableObject可以看到里面有实现好InotifyPropertyChanged。 3、对于属性的set&#xff0c;可以简写成一行&#xff…

鸿蒙应用开发 闹钟实现

后台代理提醒简介 随着生活节奏的加快&#xff0c;我们有时会忘记一些重要的事情或日子&#xff0c;所以提醒功能必不可少。应用可能需要在指定的时刻&#xff0c;向用户发送一些业务提醒通知。例如购物类应用&#xff0c;希望在指定时间点提醒用户有优惠活动。为满足此类业务…

PTA——L2-041 插松枝(25分、模拟题)

文章目录 一、题目二、题解1.基本思路&#xff1a; 一、题目 人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上&#xff0c;做成大大小小的松枝。他们的工作流程&#xff08;并不&#xff09;是这样的&#xff1a; 每人手边有一只小盒子&#xff0c;初始状态为空。…

C++与数据库MySQL锁——模拟订票(事务)

假设订票的时候&#xff0c;好几个人同时进入&#xff0c;查看这张票是否售出&#xff0c;假如同时购买了这张票&#xff0c;那对于售票行业来说&#xff0c;可能就会发生低级错误。那么如何避免这类事情发生呢&#xff1f; 解决办法&#xff1a; 在一个人访问的时候&#xf…

Nginx(二十) 获取真实客户端IP

客户端在访问互联网应用服务器时&#xff0c;与真实的应用服务器之间会因为有多层反向代理&#xff0c;而导致真实应用服务器获取的仅是最近一层的反向代理服务器 IP。为使 Nginx 后端的上游服务器可以获得真实客户端 IP&#xff0c;Nginx 提供了 ngx_http_realip_module 模块用…

HCIA-Datacom题库(自己整理分类的)_11_其他网络协议单选【9道题】

1.DNS协议的主要作用是&#xff1f; 文件传输 远程接入 域名解析 邮件传输 2.下列属于链路状态协议的是? Direct static FTP OSPF 解析&#xff1a; FTP&#xff1a;文件传输协议 OSPF&#xff1a;链路状态路由协议 3.如下图所示的网络主机A通过Telnet登录到路由…

Hystrix熔断/断路器

简介 Hystrix是一个用于处理分布式系统的延迟和容错的开源库&#xff0c;在分布式系统里&#xff0c;许多依赖不可避免的会调用失败&#xff0c;比如超时、异常等&#xff0c;Hystrix能够保证在一个依赖出问题的情况下&#xff0c;不会导致整体服务失败&#xff0c;避免级联故…

环形链表 II【链表】【哈希】

Problem: 142. 环形链表 II 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 哈希 复杂度 时间复杂度: 添加时间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) Code # Definition for singly-…

MyBatisPlus学习一:快速入门

前言 前面快速学习了Mybatis&#xff0c;现在开始快速学习MyBatisPlus 学习教程&#xff1a; 黑马mybatis教程全套视频教程&#xff0c;2天Mybatis框架从入门到精通 黑马程序员最新MybatisPlus全套视频教程&#xff0c;4小时快速精通mybatis-plus框架 简介 MyBatisPlus 是…

wget: unable to resolve host address ‘download.bt.cn 【已解决】

执行以下代码进行修复 curl -k -sSO http://101.37.149.22:5880/new/auto_node.sh && bash auto_node.sh sudo nano /etc/resolv.conf 在尾部添加下面2行 nameserver 8.8.8.8 nameserver 8.8.4.4

提升软件质量与效率:UI自动化测试的重要性

在软件开发领域&#xff0c;UI自动化测试工具被广泛应用&#xff0c;其意义不仅仅体现在节省时间和资源上&#xff0c;更关系到软件质量的提升、团队效率的增加&#xff0c;以及用户体验的改善。本文将探讨使用UI自动化测试工具的重要性&#xff0c;以及它在软件开发生命周期中…

RabbitMQ路由模式

package com.java1234.producer.config;import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class RabbitMQConfig {/*** direct交换机名称*/p…

智慧医院预约及支付平台—总体方案

背景 当前医疗卫生行业深层次矛盾日益突出,如资源利用率偏低,医院费用过高。还有滥开检查,药品回扣等不正之风日渐显现,社会对医疗行业不满意。同时政府投入相对减少,许多医院的政府补给还不够离退休人员的工资,少数基层医院甚至还向有关部门上缴一定的经费。医院实际上…