vscode远程环境中的ms-python.python插件在远程Linux中PATH路径顺序错误

问题描述 投票:0回答:1

远程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顺序错误的问题。

python linux conda centos7 vscode-remote
1个回答
0
投票

家人们,研究了一上午终于解决了,这个方法也椭圆形救国吧。

已经解决了,另一种方式寻找其他选项。 在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环境。

© www.soinside.com 2019 - 2024. All rights reserved.