It seems that scikit-learn has not been built correctly_Michael-洋的博客-程序员宝宝

技术标签: 环境配置  linux  

1、问题背景

1)环境:服务器(非root)

2)需求:安装开源深度学习代码,本机cuda以及pytorch版本太低

3)操作:可能起源于删除环境变量引起的(unset)

        a)查看环境变量env、printenv,查看单个变量printenv PATH或者echo $PATH

        b)重置环境变量unset PATH(貌似不能删除单个路径),这个慎用!!!

        c)添加环境变量export,例如export PATH=/usr/local/cuda-10.2/bin或者export                       PATH=/usr/local/cuda-10.2/bin:$PATH;另外,永久性添加在.bashrc文件中,并在命令行               source .bashrc临时添加直接在命令行执行即可。

             区别:加:$PATH的表示这个路径放在最开头,那么系统检索的时候会优先选择该路径,              不加:$PATH就默认将路径放到该环境变量最后,如果前面有其他可调用的路径就不会调                 用该路径。所以最好不要使用unset,而是使用export PATH= to/your/path:$PATH。

2、遇到的问题

1)安装mmcv时候,ERROR: Failed building wheel for opencv-python

        可能的解决方案:运行 pip install -vv,查看哪些依赖库未安装或者未升级。

2)ModuleNotFoundError: No module named ‘skbuild’

        pip install scikit-build,如果还有依赖继续pip install下去

        如果有cmake相关的,参考:

ModuleNotFoundError: No module named ‘skbuild‘解决办法_月夜竹清的博客-程序员宝宝_python skbuild

3)It seems that scikit-learn has not been built correctly或者dlopen: cannot load any more object with static TLS

        把scikit-learn版本降下来

4) Python error: Aborted 或者double free or corruption

遇到第4种问题是最坑的,需要定位问题出错的位置。
a)在python程序中添加如下代码,来追溯问题出现位置。

import faulthandler
faulthandler.enable()

b)GDB大法

1、在执行程序的最开头加入如下代码

import sys
def trace(frame, event, arg):
    print("%s, %s:%d" % (event, frame.f_code.co_filename, frame.f_lineno))
    return trace
sys.settrace(trace)
# 下面是原来的代码
import codecs  #
...

2、在命令行执行如下代码

gdb python

 然后在弹出的窗口中执行run /path/to/script.py

(gdb) run /path/to/script.py
## wait for segfault ##

一次调试段错误(segmentation fault)的经验 - 知乎

What causes a Python segmentation fault? - Stack Overflow

然后定位到详细问题如下5):

5)ImportError: ERROR: recursion is detected during loading of "cv2" binary extensions. Check OpenCV installation.

 然后采用unset更新环境变量后还是报错,怀疑是直接用了已经下载的安装包安装的,这些安装包是错误的版本。所有采用conda清除无用安装包,参考如下:

conda clean -p      //删除缓存
conda clean -y --all //删除pkgs目录下所有的无用安装包及cache

conda清除无用安装包_万无引力-的博客-程序员宝宝_conda清理安装包

Python-Opencv [ERROR: recursion is detected during loading of "cv2"_凌空的桨的博客-程序员宝宝

ImportError: ERROR: recursion is detected during loading of "cv2" binary extensions. Check OpenCV installation. - emanlee - 博客园

3、删除代码及虚拟环境重来 解决问题!!!

一路跟着install.readme安装下去,总共报两个错误:

1)ModuleNotFoundError: No module named ‘skbuild’

        a. 这个首先注意pip版本是不是过低,有提示就先更新pip。可能错误直接就解决了。

        b. 不行的话再根据2中的pip install -vv,看少什么依赖库。

        c. 根据2中 2)转载的博客来解决。

2)It seems that scikit-learn has not been built correctly或者dlopen: cannot load any more object with static TLS

        把scikit-learn版本降下来0.20.3,Downgrading to scikit-learn 0.20.3 makes the problem go away.

        https://github.com/scikit-learn/scikit-learn/issues/14485

问题解决!!适当时候删除代码和虚拟环境重来最好,Over!!

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

智能推荐

RT-Thread 简介及架构_weixin_43885532的博客-程序员宝宝_rt-thread

RT-Thread,全称是 Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。事实上,一个处理器核心在某一时刻只能运行一个任务,由于每次对一个任务的执行时间很短、任务与任务之间通过任务调度器进行非常快速地切换(调度器根据优先级决定此刻该执行的任务),给人造成多个任务在一个时刻同时运行的错觉。在 RT-Thread 系统中,任务通过线程实现的,RT-Thread 中的线程调度器也就是以上提到

QtCreator创建CMake工程_FlyWM_的博客-程序员宝宝_qt creator cmake

一、MinGw  使用Mingw编译器的话创建很简单,新建工程-Non-Qt Project-Plain C++ Application: 选择Cmake: 选择Mingw编译器即可。 二、MSVC  如果使用vs编译器的话,需要准备: 1、vs已经安装。 2、win10 SDK(本人使用的是win10)已经安装。 3、将D:\Qt\Qt5.9.6\Tool...

word2vec python 代码实现,word2vec初探(用python简单实现)_社交恐惧症的博客-程序员宝宝

为什么要用这个?因为看论文和博客的时候很常见,不论是干嘛的,既然这么火,不妨试试.如何安装从网上爬数据下来对数据进行过滤、分词用word2vec进行近义词查找等操作运行结果:需要安装的包,可以用pycharm的preference:点「+」加号同样,点「+」加号。过一会儿会提示你安装是否成功的。整个的文件结构:-语料(网上爬下来的)-自定义词典-主要的python文件主要的py文件:# -*- c...

JVM虚拟机详解_wespten的博客-程序员宝宝

JVM是Java Virtual Machine(Java虚拟机)的缩写,简单来说JVM是用来解析和运行Java程序的。虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

西门子万人裁员背后的思考 :有车有房的中年人最好使唤_普通网友的博客-程序员宝宝

黑客技术点击右侧关注,了解黑客的世界!Java开发进阶点击右侧关注,掌握进阶之路!Linux编程点击右侧关注,免费入门到精通!来源丨聚商圈https://mp.weixi...

【Python】struts2-045批量检测_weixin_30419799的博客-程序员宝宝

0x00 环境存在struts2-045漏洞的war包apache-tomcat0x01 脚本#coding:utf-8import reimport urllibimport urllib2import linecacheurl="http://127.0.0.1:8080/struts2-rest-showcase/orders.xhtm...

随便推点

关于PPP Multilink协议的配置_weixin_34187822的博客-程序员宝宝

使用2个E1捆绑实现4M的数据传输。PPP Multilink协议(MP)是PPP(点对点协议)的扩展,它具有绑定两条或多条同步并行连接的能力。所产生的虚拟连接拥有的带宽等于各条独立连接的带宽的总和。PPP包含有用来重组和排序的信息。MP在需要时可以把包切割成碎片(fragment)以符合MTU(最大传输...

关于结构体内存对齐总结_Suhw的博客-程序员宝宝_多重结构体内存说明

内存对齐计算可谓是笔试题的必考题,但是如何按照计算原则算出正确答案一开始也不是很容易的事,所以专门通过例子来复习下关于结构体内存对齐的计算问题。(编译环境为vs2015) 对齐原则: 原则1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员...

关于移动端页面调试工具分析及使用方法简介_jason_07的博客-程序员宝宝_手机查看xhr

移动端调试工具本文主要了解一些移动端页面调试解决方案及使用方法简介目录移动端调试工具目录需求分析现有方案1. wechat2. eruda3. VIDE (DebugGap IDE)框架分析vConsole 使用eruda 使用需求分析 为什么要做移动端页面调试?在样做移动端调试?如何选择移动端页面调试? 微信...

Hurst指数以及MF-DFA_dielucui7698的博客-程序员宝宝

转:https://uqer.io/home/https://uqer.io/community/share/564c3bc2f9f06c4446b48393写在前面9月的时候说想把arch包加进去,昨儿发现优矿已经加好了,由于优矿暂时没有开放历史高频接口,我索性就分享一个冷冷的小知识:分形市场假说(FMH),分析中玩的是低频数据(日线,或者分钟线)。...

springboot+freemarker+bootstrap快速实现分页功能(含java源码)_weixin_33938733的博客-程序员宝宝

本节是建立在上节的基础上,上一节给大家讲了管理后台表格如何展示数据,但是当我们的数据比较多的时候我们就需要做分页处理了。这一节给大家讲解如何实现表格数据的分页显示。准备工作1,项目要引入freemarker和bootstrap,如果不知道怎么引入的,请查看《10小时入门java开发03 springboot+freemarker+bootstrap快速实现管理后台》还是老规矩,看效...

CGBTN2109汇总复习_程序媛 泡泡的博客-程序员宝宝

CGBTN2109汇总复习复习思路先抓知识结构主干,再去慢慢补充细节拓展遇到会的,快速回顾遇到忘记或者是不会的,先记录,后面自己复习的时候着重回顾一阶段学习路径1 基础语法Basic1.基础环境配置1. 安装JDKJDK:Java开发工具包,我们使用的版本是1.8注意:一台PC上可以安装多个JDK,具体环境变量配置哪个JDK,哪个就生效2. 环境变量的配置JAVA_HOME : 配置的是JDK安装的目录Path : 配置的是JDK的bin目录,不新建的CLASS_PATH:配置

推荐文章

热门文章

相关标签