无root权限解决ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found问题
Posted kikiLQQ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无root权限解决ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found问题相关的知识,希望对你有一定的参考价值。
一、问题描述
在利用实验室中的服务器中运行代码时,因libstdc++.so.6版本问题产生报错信息如下:
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/用户名/anaconda3/envs/torch/lib/python3.8/site-packages/matplotlib/_path.cpython-38-x86_64-linux-gnu.so)
①使用下述命令查看/usr/lib/x86_64-linux-gnu/libstdc++.so.6对应的软连接信息,发现其指向版本为6.0.25。
cd /usr/lib/x86_64-linux-gnu/
ls -l libstdc++.so*
②使用下述命令查看libstdc++.so.6链接包含的动态库,发现确实未包含GLIBCXX_3.4.29:
strings libstdc++.so.6 | grep GLIBCXX
查阅网上相关解决资料,发现解决方法大多需要将/usr/lib/x86_64-linux-gnu/libstdc++.so.6下对应的软连接进行修改替换。但由于使用实验室的服务器时不具有root权限,无法进行替换,因此考虑指定加载库的路径。
二、问题解决
①检查服务器中是否有包含GLIBCXX_3.4.29的libstdc++.so.6版本(最好是自己用户名下)
find /home/自己用户名 -name libstdc++.so.6*
注:这里find后面的路径一般是根据自己服务器中,用户文件所在路径进行修改,我的所有文件都在/home/自己用户名这个目录下
发现两个版本,因为我这里使用torch环境,所以查看第二个动态链接库/home/用户名/anaconda3/envs/torch/lib/libstdc++.so.6中是否包含GLIBCXX_3.4.29,输入命令:
strings /home/用户名/anaconda3/envs/torch/lib/libstdc++.so.6 | grep GLIBCXX
②指定加载库的路径
根据我们上面找到的路径:/home/用户名/anaconda3/envs/torch/lib/libstdc++.so.6。我们直接在终端中修改指定加载库的路径:
export LD_LIBRARY_PATH=/home/用户名/anaconda3/envs/torch/lib
再次运行,发现问题解决,可以成功运行!
创建Python虚拟环境 --- 解决无root权限且anaconda权限受限
实验室做的东西涉密,所以服务器没有root,anaconda安装东西也有些受限,另外登陆账户是公用的,如果自己安装一个anaconda,会影响其他使用这个公用账户的人,于是就各种尴尬。解决办法很简单,搞一套自己的usr以及bash_profile以及Python虚拟环境等等
1、创建Python虚拟环境
参考这个:http://blog.csdn.net/a731062834/article/details/71380390
使用 conda create -n your_env_name Python=X.X(2.7、3.6等) anaconda 命令创建python版本为X.X、名字为your_env_name的虚拟环境。your_env_name文件可以在Anaconda安装目录envs文件下找到。
我是在~/.conda/envs/找到我自己的环境
启动和停止自己虚拟环境的方法:
# To activate this environment, use:
# $ source activate zafedom
#
# To deactivate this environment, use:
# $ source deactivate
也可以直接只用自己虚拟环境中的Conda pip python等
2、在自己的虚拟环境中安装包
使用命令conda install -n your_env_name [package]即可安装package到your_env_name中
3、删除虚拟环境。
使用命令conda remove -n your_env_name(虚拟环境名称) --all, 即可删除。
4、删除环境中的某个包。
使用命令conda remove --name $your_env_name $package_name 即可。
=====分割线===找一个目录当自己的home 建一个文件档自己的bash_profile
然后里面写上
export PATH=路径1:$PATH
以后安装东西的时候 configure的时候用configure --prefix=路径1就好了,之所以把路径1放在前面,是因为这样系统会优先加载路径1的东西,比如gcc,往往出现的情况是需要的gcc版本比系统高 于是自己安装一个gcc在路径1,那么用上面的就可以优先使用自己的路径1的gcc
还有一类文件比如so文件,经常需要修改连接,也是同样的做法,找一个路径2存放自己的so
然后export LD_LIBRARY_PATH=路径2:$LD_LIBRARY_PATH
如上,只要以后每次登陆都自己source一次自己建立的bash_profile就OK了,这足够把一个没有root权限的机器用的很爽
enjoy~
以上是关于无root权限解决ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found问题的主要内容,如果未能解决你的问题,请参考以下文章