vscode中,安装其他版本cuda后,修改PATH变量无效

问题

前提: 以下操作全部在vscode执行。

首先安装了cuda的其他版本(原有11.4版本,现安装12.4版本)

然后在~/.bashrc中修改了PATH变量

export PATH=/usr/local/cuda-12.4/bin:/usr/local/cuda-11.4/bin:$PATH

但是实际依然使用的11.4(使用which nvcc查看其仍然指向11.4),因为这有一个vscode导致的坑。

原因

vscode下

使用vscode打开一个远程项目,先打印一下实际的PATH变量 echo $PATH

javascript 复制代码
/home/user/.vscode-server/bin/8b3775030ed1a69b13e4f4c628c612102e30a681/bin/remote-cli:/home/user/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/cuda-11.4/bin:/usr/local/cuda-12.4/bin:/usr/local/cuda-11.4/bin:/home/user/.vscode-server/bin/8b3775030ed1a69b13e4f4c628c612102e30a681/bin/remote-cli:/home/user/anaconda3/bin:/home/user/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/cuda-11.4/bin:/home/user/.vscode-server/bin/8b3775030ed1a69b13e4f4c628c612102e30a681/bin/remote-cli:/home/user/anaconda3/bin:/home/user/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/cuda-11.4/bin

我们分下行

javascript 复制代码
/home/user/.vscode-server/bin/8b3775030ed1a69b13e4f4c628c612102e30a681/bin/remote-cli:
/home/user/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:
/usr/local/cuda-11.4/bin:/usr/local/cuda-12.4/bin:/usr/local/cuda-11.4/bin:

/home/user/.vscode-server/bin/8b3775030ed1a69b13e4f4c628c612102e30a681/bin/remote-cli:
/home/user/anaconda3/bin:/home/user/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:
/usr/local/cuda-11.4/bin:

/home/user/.vscode-server/bin/8b3775030ed1a69b13e4f4c628c612102e30a681/bin/remote-cli:
/home/user/anaconda3/bin:/home/user/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:
/usr/local/cuda-11.4/bin

发现除了.bashrc里写的/usr/local/cuda-12.4/bin:/usr/local/cuda-11.4/bin:,其他部分重复了三遍。 并且,重复部分还有11.4版本的cuda路径,在12.4前面。

首先分别查看了所有可以修改PATH变量的文件(具体哪些文件问chatgpt),均未找到,只好通过 grep -r /usr/local/cuda-11.4/bin ~/,寻找所有出现/usr/local/cuda-11.4/bin的位置。

最终在vscode 相关目录找到

/home/user/.vscode-server/extensions/ms-python.python-2024.2.1/pythonFiles/deactivate/bash/envVars.txt

根据kimi的解释

go 复制代码
该路径 `/home/user/.vscode-server/extensions/ms-python.python-2024.2.1/pythonFiles/deactivate/bash/envVars.txt` 指向一个特定的文件,这个文件是Visual Studio Code(VS Code)的一个扩展相关联的脚本文件,具体来说是与Python相关的扩展。

在这个上下文中,`ms-python.python` 是由Microsoft提供的VS Code的Python语言支持扩展。扩展版本号为 `2024.2.1`。这个扩展提供了Python开发的各种功能,包括代码补全、调试、智能提示等。

`deactivate` 目录下的 `bash` 目录表明这个脚本是为bash shell编写的,而 `envVars.txt` 文件很可能包含了一些用于在bash环境中激活或取消激活Python虚拟环境时设置或取消设置环境变量的命令。

这个文件可能是由VS Code的Python扩展自动生成的,用于管理虚拟环境的激活和取消激活。当用户在VS Code中创建或删除一个Python虚拟环境时,这个文件可能会被更新,以确保bash shell正确地反映了虚拟环境的状态。

应该是该扩展维护的一个环境变量。

非vscode终端的PATH无问题

由上文可以推测,vscode污染了PATH,那么非vscode应该可以应该可以打印出正确的PATH 事实也是如此。直接用终端ssh登录

javascript 复制代码
/home/user/anaconda3/bin:/home/user/anaconda3/condabin:/usr/local/cuda-12.4/bin:/usr/local/cuda-11.4/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

打印出来的结果没有重复,并且12.4已经成功排在了11.4前面。

解决方法

/home/user/.vscode-server/extensions/ms-python.python-2024.2.1/pythonFiles/deactivate/bash/envVars.txt内的PATH修改为正确的,然后重启vscode,可以发现PATH是期望的值

相关推荐
木灵鱼儿_前端2 天前
告别手动重启:一键刷新 VS Code 服务的效率神器 —— Restart VSCode Server
visual studio code
bryceZh5 天前
Cursor/VScode+iOS开发工具链
ai编程·xcode·visual studio code
前端工作日常5 天前
我学习到的获取.vsix文件方法
visual studio code
seepine8 天前
VSCode + Md Editor 插件, Typora 的平替方案
markdown·visual studio code
夲奋亻Jay9 天前
VSCode使用插件Github Copilot进行AI编程
visual studio code
xuedaobian9 天前
AI IDE里的 context 工程
人工智能·aigc·visual studio code
Cyltcc11 天前
如何安装和使用 Claude Code 教程 - Windows 用户篇
人工智能·claude·visual studio code
UrbanJazzerati11 天前
使用 Thunder Client 调用 Salesforce API 的完整指南
面试·visual studio code
清沫14 天前
键盘效率提升指南(VSCode+Vim+SurfingKeys)
前端·vim·visual studio code
OLong15 天前
2025年最强React插件,支持大量快捷操作
前端·react.js·visual studio code