远程SSH日志:
(base)[dev@localhost web_vpn]$ conda activate flask_web
(flask_web)[dev@localhost web_vpn]$ echo $PATH
/home/dev/.vscode-server/bin/0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2/bin/remote-cli:/usr/local/cuda-12.1/bin:/usr/lib/jvm/jdk-17.0.8/bin:/bin:/home/dev/miniconda3/envs/flask_web/bin:/home/dev/miniconda3/condabin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dev/.local/bin:/home/dev/bin:/home/dev/miniconda3/bin:/home/dev/.vscode-server/bin/0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2/bin/remote-cli:/usr/local/cuda-12.1/bin:/usr/lib/jvm/jdk-17.0.8/bin:/bin:/home/dev/miniconda3/bin:/home/dev/miniconda3/condabin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dev/.local/bin:/home/dev/bin
(flask_web)[dev@localhost web_vpn]$
环境:
Remote environment: linux centos7
ms-python.python plugin version: v2023.22.1
Operating environment:
VScode Version: 1.85.1 (user setup)
Submitted: 0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2
Date: 2023-12-13T09:49:37.021Z
Electron: 25.9.7
ElectronBuildId: 25551756
Chromium: 114.0.5735.289
Node.js: 18.15.0
V8: 11.4.183.29-electron.0
OS: Windows_NT x64 10.0.22621
我使用的是python插件(插件id为:ms-python.python),上面是vscode远程启动,我切换conda到虚拟环境“flask_web”,可以看到“(flask_web)”已经存在在它的前面。但是,当我使用 echo $PATH 检查环境变量时,conda 虚拟环境目录中“/bin”位于“/home/dev/miniconda3/envs/flask_web/bin”前面。 ”在它的前面。 然而,当我使用xshell的ssh连接到服务器并启动“flask_web”虚拟环境时,第一个$PATH是conda虚拟环境的bin目录。 我在互联网上尝试了很多东西,例如更改远程服务器设置:
"terminal.integrated.env.osx": {
"PATH": ""
},
"terminal.integrated.inheritEnv": false
这些都不适用,在 vscode 远程的 $PATH 中,仍然是 /bin 优先于 conda 虚拟环境的 bin 目录。这也导致我在 vscode Remote 的 shell 中使用 python 命令,在 /bin 中启动旧版本的 python,并且无法使用我真正需要的 python 虚拟环境。
不过好在,当时使用ctrl+F5运行python程序时,它运行的命令是:
(base)[dev@localhost web_vpn]$ /usr/bin/env /home/dev/miniconda3/envs/flask_web/bin/python /home/dev/.vscode-server/extensions/ms- python.python-2023.22.1/pythonFiles/lib/python/debugpy/adapter/... /... /debugpy/launcher 58218 -- /home/dev/dev/web_vpn/test.py
直接使用参数在conda虚拟环境目录中启动python(这不受$PATH变量的影响,因为虚拟环境中的python是通过绝对路径启动的)。所以python运行时正确使用了conda虚拟环境。
以下是来自vscode终端的环境贡献,可以看到ms-python.python插件似乎在远程环境中向后设置了$PATH变量,将根目录前进到“/bin”,但这只是发生在远程情况,发生在本地情况。在本地运行代码不会导致此问题。
## Extension: ms-python.python
Environment is enabled. `~/miniconda3/envs/flask_web/bin/python`
- `CONDA_ROOT=/home/dev/miniconda3`
- `CONDA_PREFIX_1=/home/dev/miniconda3`
- `PATH=/home/dev/.vscode-server/bin/0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2/bin/remote-cli:/usr/local/cuda-12.1/bin:/usr/lib/jvm/jdk-17.0.8/bin: /bin:/home/dev/miniconda3/envs/flask_web/bin:/home/dev/miniconda3/condabin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/ home/dev/.local/bin:/home/dev/bin:${env:PATH}`
- `CONDA_SHLVL=2`
- `CONDA_PREFIX=/home/dev/miniconda3/envs/flask_web`
- `CONDA_DEFAULT_ENV=flask_web`
- `CONDA_PROMPT_MODIFIER=(flask_web) `
- `PS1=(flask_web) ${env:PS1}`
非常感谢!
希望能够通过修改相关vscode或ms-python.python插件的配置来解决远程服务器$PATH顺序错误的问题。
家人们,研究了一上午终于解决了,这个方法也椭圆形救国吧。
已经解决了,另一种方式寻找其他选项。 在vscode远程的setting.json文件中,添加以下配置:
"terminal.integrated.profiles.linux": {
"bash with custom PATH": {
"path": "/bin/bash",
"args": ["-c", "exec bash --init-file <(echo 'right_conda_name=$CONDA_DEFAULT_ENV; source ~/.bashrc; conda activate $right_conda_name"]]
}
}
原理是在打开新终端之前运行args中的命令,其中保存了正确的conda“env”虚拟环境名称,然后在创建终端后,用这个正确的虚拟环境名称激活对应的conda环境。