说明

很多文章要求更改usr下的文件,但是我没有权限,因此无法通过root更改。文章分为四部分,可以直接看解决部分。

环境

ubuntu16.04+Anaconda3-2020.11-Linux-x86_64.sh(python3.8.5)+torch1.8.0+torchvision0.9

总结

出错原因是scipy版本高,与对应的ubuntu自带的gcc低版本不兼容。做法是降低scipy版本,同时设置了anaconda环境下的gcc版本。

报错

ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version 'GLIBCXX_3.4.22' not found (required by /data1/zhx/anaconda3/envs/ship/lib/python3.8/site-packages/scipy/fft/
_pocketfft/pypocketfft.cpython-38-x86_64-linux-gnu.so)

找错过程

在我的代码中使用了skimage.measure.label函数,此函数间接调用了scipy包,因此报了文章开头的错误。

参考文章【1】中提到说scipy版本太高,因此降低版本。直接在anaconda的对应环境下运行下面指令就可以。

conda install scipy==1.3.1

但是我运行之后还会报新的错误,错误如下所示,(前面没有截取完整):

scipy/special/_ufuncs.cpython-38-x86_64-linux-gnu.so: undefined symbol: _gfortran_stop_numeric_f08

后来觉得仍然出问题,因此又把环境重新安装了一遍,但是还是有错。后来不知道怎么想到是否是编译器的问题,感觉是scipy依赖于本地的编译器。因此使用gcc -v查看编译器版本,发现版本是gcc5.4.0(ubuntu16.04,服务器),而我自己的主机上是gcc9.3.0(ubuntu20.04,本地主机),本地主机可以运行服务器不行,因此考虑是本地编译器问题。因此搜到了第二篇参考文章【2】,将我当前环境下的gcc更改了。之后就可以使用了。

解决

  1. 一般是scipy版本高导致的,可以先将执行conda install scipy==1.3.1,conda会自行安装以及卸载原有的包。
  2. 之后还报错的话,可能是gcc版本的问题。按照【2】中的做法更改当前环境下的gcc版本。
#新建环境mmdetection 我觉得进入当前环境就行
$ conda create -n ship python=3.7
$ conda activate ship
# 安装最新gcc
(ship)yjys:~$ conda install -c conda-forge gcc_impl_linux-64
# 查看gcc
(ship)yjys:~$ gcc -v
#提示gcc版本还是4.8.5 !!!

别着急,下面需要链接一下。在anconda3/envs/ship下搜索刚刚安装的gcc的路径,在bin里没有,在libexec/gcc/x86_64-conda-linux-gnu/11.2.0/gcc 找到,然后链接文件

(ship)yjys:~$ ln -s /data1/zhx/anaconda3/envs/ship/libexec/gcc/x86_64-conda-linux-gnu/11.2.0/gcc  /data1/zhx/anaconda3/envs/ship/bin/gcc
(ship)yjys:~$ conda install gcc_linux-64
(ship)yjys:~$ conda deactivate
(ship)yjys:~$ conda activate mmdetection
(ship)yjys:~$ gcc -v
# 提示gcc版本11.2.0!!!
  1. 正常情况下是可以了,但是20211127在旧服务器上再次操作后,在使用pip安装tqdm时,又出现其他的错误,补充如下:
ModuleNotFoundError: No module named '_sysconfigdata_x86_64_conda_linux_gnu'

解决方法参考文章[3],好使。 简单介绍一下:

在文件目录下raid/zhx/anaconda3/envs/ship/lib/python3.8/应该是有_sysconfigdata_x86_64_conda_cos6_linux_gnu.py _sysconfigdata_x86_64_conda_linux_gnu.py,但是实际看了后发现少一个,因此拷贝一下就可以。

cp /raid/zhx/anaconda3/envs/ship/lib/python3.8/_sysconfigdata_x86_64_conda_cos6_linux_gnu.py
/raid/zhx/anaconda3/envs/ship/lib/python3.8/_sysconfigdata_x86_64_conda_linux_gnu.py

效果

【已解决】 version 'GLIBCXX_3.4.22' not found

参考

[1] 正确解决libstdc++.so.6: version `GLIBCXX_3.4.22′

[2] 如何改变anaconda的gcc 版本?(知乎名称为人生苦短及时行乐的文章)

[3] # 解决python报错:ModuleNotFoundError: No module named ‘_sysconfigdata_x86_64_conda_linux_gnu’