Pycharm使用远程服务器内环境报错:version `GLIBCXX_3.4.29‘ not found,但服务器终端命令行可以正常运行程序

1. 前言

报错信息:ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found

是scipy的函数抛出来的

这个报错贯穿了我一整年的时间,因为package的版本不能降,去年找了很多方法都无法解决,不过既然服务器可以直接跑,就搁置了。但这次必须用到debug功能,不得不想办法彻底解决掉这个问题。

2. 解决过程

服务器是课题组的,我没有sudo权限,有的话更新一下系统lib目录下的gcc版本可能也就解决了,但现在只能去找别的方法。

观察报错发现很奇怪的一点,pycharm搜索的lib目录不是虚拟环境里的,而是系统里面的。我去自己的虚拟环境里搜索了一下发现是有这个29版本的,那现在的问题就变成了为什么pycharm不去读取虚拟环境中的lib里的运行库文件反而去读系统目录下面的,很明显大概率是环境变量的问题。但是一开始服务器的terminal运行程序也是会报这个错的,所以我在服务器里已经把虚拟环境的lib作为环境变量添加到了.bashrc文件里面,后面在terminal已经不会报错了,为什么修改环境变量对pycharm不起效呢?

后面改了一下搜索关键词,集中到pycharm内添加环境变量,找到了解决办法,具体可以参考这篇博客:pycharm远程连接服务器后添加多个LD_LIBRARY_PATH_pycharm运行时配置动态链接库路径-CSDN博客

简单来讲原因就是pycharm运行程序的时候根本不会加载.bashrc文件,这个文件应该只会在使用terminal登录服务器系统的时候才会初始化运行,所以在服务器添加的环境变量并不会起效,必须在pycharm里再添加才行。添加要在对应程序的configuration里修改,具体如下(适用于2023.2.3专业版):

(1)首先选择Edit Configurations

或者更简单的,从这里直接生成,这样可以直接忽略下面(2)和(3)里添加script和working directory的过程:

(2)打开后左上角加号新建一个配置,选python文件

(3)之后弹出这个界面,你可以修改一下这个运行配置的名字。

script是你要运行的.py文件的位置,script下面的一行是用来加给程序传入的参数的,服务器terminal里写的--x xx这种全复制过来就行

working directory是文件所在的目录

另外运行环境看一下是不是服务器上那个

然后就是重量级的环境变量了,lib目录就要添加在这里

添加页面就这样:

LD_LIBRARY_PATH

$LD_LIBRARY_PATH:/home/xxx(你自己的账号名)/anaconda3/envs/xxx(你自己的虚拟环境名)/lib

添加完之后就能正常运行了

后续的小插曲:用pycharm的debug功能检查完程序之后,就想用linux的nohup命令让程序挂在后台不断掉,这样就又需要回到terminal命令行运行程序。但此时再在服务器运行的话,一旦模型传到gpu之后开始运算系统就会报错:总线错误(核心已转储)。我一开始以为是显存不够才报错(之前疑似有过),但后面测试发现显存非常充足的情况下还是会在运行到相同位置时报错,而此时pycharm却可以正常运行程序(什么倒反天罡啊,笑死我了)。去搜了一下这个报错,信息非常少,但有些提到了可能是运行环境或者cuda版本不兼容之类的,也就是说和虚拟环境可能还是有关系。有了上面的经验之后我就先怀疑到了.bashrc文件上,而且回忆了一下问题的时间点好像就是我为了debug于是在服务器端尝试再次对.bashrc文件动手后才出现的,显得它更可疑了。后面检查了一下文件,真的发现了问题:

在文件末尾的conda初始化配置这里,判断语句中间赫然冒出来一个意义不明的“i”

估计是进insert模式输入的时候误写进去的,因为也没有标红之类的提示,一开始改文件的时候就没发现这里有问题,它的异常标注也就只是本应的黄色变成白色,也忒不明显了吧喂!

删掉了罪魁祸首,bug成功解决了。真是败是因为不加载.bashrc,成也是因为不加载.bashrc(乐)

### 回答1: Windows Update Medic Service是Windows操作系统中的一个服务,它可以自动检测和修复Windows Update相关的问题,确保系统能够顺利地更新和安装最新的补丁和更新。该服务可以帮助用户解决一些常见的Windows Update错误,例如更新失败、无法下载更新等问题。 ### 回答2: Windows Update Medic Service(WaaSMedicSVC)是Windows 10操作系统中的一项服务,它主要负责帮助用户解决系统更新和Windows Store应用程序更新的问题。 Windows 10操作系统需要经常接受更新来更新安全性、修复故障和提高性能。但是,更新过程中可能会出现各种问题,例如更新失败、更新无法下载、软件包损坏等等。在这种情况下,Windows Update Medic Service将帮助用户解决这些问题,以确保系统能够及时更新。 WaaSMedicSVC是一个后台服务,它会监控更新服务并及时修复更新故障。如果WaaSMedicSVC检测到更新服务无法正常工作,它会尝试重新启动更新服务。它还能够修复损坏的更新软件包,并删除升级失败的临时文件。 除了更新修复之外,WaaSMedicSVC还负责管理Windows Store应用程序的更新。当Windows Store应用程序下载或安装失败时,WaaSMedicSVC将会检查系统和应用的配置,以确保一切都正确。如果出现问题,WaaSMedicSVC将自动修复。 总之,Windows Update Medic Service是一个非常重要的服务,它可以帮助Windows 10用户顺利地完成系统更新和Windows Store应用程序更新。如果用户遇到任何更新问题,可以尝试重新启动WaaSMedicSVC服务或联系微软客户服务寻求帮助。 ### 回答3: Windows Update Medic Service是Windows Update所提供的一个辅助工具软件,主要功能是自动检测Windows Update的状态,解决更新问题,确保系统安全和稳定。Windows Update Medic Service可以自动检测到Windows Update出现的错误,提供错误修复服务,帮助用户更快速地解决Windows Update的相关问题,提高用户的使用体验。 Windows Update Medic Service作为Windows 10的重要组成部分,被设计为后台运行服务,主要负责保证计算机系统的安全、稳定和高效。当Windows Update出现更新失败、卡顿、闪退等问题时,Windows Update Medic Service会自动启动并扫描计算机系统,查找跟Windows更新相关的问题,然后自动进行修复,避免了用户多次尝试手动修复的繁琐过程。 Windows Update Medic Service可以帮助解决多种Windows Update的错误,如更新卡顿、下载失败、安装失败、更新异常、组件损坏等问题,可以让用户在不需要重装系统的情况下快速解决更新问题。 总之,Windows Update Medic Service是Windows Update所提供的一款非常有用的辅助工具软件,对于解决Windows更新问题、提高系统的更新效率和稳定性具有重要的帮助作用。通过自动检测和修复Windows Update相关的问题,Windows Update Medic Service可以让用户享受更加稳定、安全、高效的计算机使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值