问题
前提: 以下操作全部在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
是期望的值