说明
很多文章要求更改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
更改了。之后就可以使用了。
解决
- 一般是scipy版本高导致的,可以先将执行
conda install scipy==1.3.1
,conda会自行安装以及卸载原有的包。 - 之后还报错的话,可能是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!!!
- 正常情况下是可以了,但是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
效果
参考
[1] 正确解决libstdc++.so.6: version `GLIBCXX_3.4.22′
[2] 如何改变anaconda的gcc 版本?(知乎名称为人生苦短及时行乐
的文章)
[3] # 解决python报错:ModuleNotFoundError: No module named ‘_sysconfigdata_x86_64_conda_linux_gnu’