【问题标题】:Why is VS Code calling the wrong virtual environment as base?为什么 VS Code 调用错误的虚拟环境作为基础?
【发布时间】:2022-01-20 23:54:05
【问题描述】:

我每天通过 SSH 连接到的服务器中有一些 conda 虚拟环境。从终端登录并列出环境给了我以下信息:

(base) [rgr6291@klc0201 ~]$ conda env list
# conda environments:
#
fomc                     /home/rgr6291/.conda/envs/fomc
r_conda                  /home/rgr6291/.conda/envs/r_conda
rfe_paper                /home/rgr6291/.conda/envs/rfe_paper
base                  *  /software/python-anaconda3/2019.10

所以我有基础环境和三个虚拟环境。我通常使用 Visual Studio Code 和远程 SSH 扩展在服务器上编辑代码。当提示我选择 Python 解释器时,VS Code 会识别所有这些环境:

事实证明,无论我是否在 fomc 环境中, VS Code 启动终端窗口都会导致不同的行为。

如果我选择 rfe_paper 环境并使用 VS Code 启动一个新终端,我会得到以下自动输出:

source activate rfe_paper
(base) [rgr6291@klc0201 HF_FOMC]$ source activate rfe_paper
(rfe_paper) [rgr6291@klc0201 HF_FOMC]$ 

它启动终端,然后激活所需的环境。但是,fomc 环境中的相同过程会导致不同的结果:

source /home/rgr6291/.conda/envs/fomc/bin/activate
(base) [rgr6291@klc0201 HF_FOMC]$ source /home/rgr6291/.conda/envs/fomc/bin/activate
(base) [rgr6291@klc0201 HF_FOMC]$ conda activate fomc

(base) [rgr6291@klc0201 HF_FOMC]$ conda env list
# conda environments:
#
base                  *  /home/rgr6291/.conda/envs/fomc
r_conda                  /home/rgr6291/.conda/envs/r_conda
rfe_paper                /home/rgr6291/.conda/envs/rfe_paper

请注意,开头有一个额外的source 调用。不知何故,VS Code 被误导并认为fomc 环境是基础环境。

  1. 可能是什么原因造成的?
  2. 如何解决这个问题?

昨天运行良好,但今天似乎坏了。唯一的不同是我今天早上将fomc中安装的包导出到了一个yml文件。我不知道这会如何影响行为。

顺便说一下,我也报告以下内容。这是~/.conda/envs/fomc/bin/activate的内容:

#!/bin/sh
_CONDA_ROOT="/home/rgr6291/.conda/envs/fomc"
# Copyright (C) 2012 Anaconda, Inc
# SPDX-License-Identifier: BSD-3-Clause
\. "$_CONDA_ROOT/etc/profile.d/conda.sh" || return $?
conda activate "$@"

我认为 CONDA_ROOT 是错误的,但我不知道它实际上应该是什么。

提前致谢。

【问题讨论】:

  • 这确实很奇怪。 fomc 环境是否有可能安装了 conda package?通常只有 base 应该拥有它。
  • 你是对的@merv。我完全不知道为什么要安装它,但确实是这样。我想我应该关闭这个问题。或者删除它。我不确定这里的正确程序是什么。
  • 如果你愿意,我写了一些东西可以试试。但是,我会说我不清楚这是一个如此大的问题。除了conda env list 和一些环境变量不正常之外,真的对功能有任何实质性影响吗?
  • @merv 不是真的,功能没有变化。感谢您的回答!

标签: python visual-studio-code terminal virtualenv conda


【解决方案1】:

⚠️ 注意: 这是未经测试的建议。在尝试之前,请确保整个过程清晰。请务必在更改之前备份所有文件!

我个人没有遇到过这种情况,但我怀疑解决它需要从 fomc 环境中删除 conda 包。这可能就足够了;但确保 .bashrc.bash_profile 中的 Conda 初始化代码设置为使用实际的 base 环境而不是 中的脚本/入口点也很重要fomc 环境。

因此,我建议首先检查.bashrc.bash_profile,并确保它们没有任何引用fomc 的路径。如果他们这样做,那么整个初始化块,开始和结束

# >>> conda initialize >>>
...
# <<< conda initialize <<<

应该被删除,然后应该重新运行conda init 命令激活真正的base环境,或者使用base的完整路径强>conda.

完成此操作后,重新启动 shell 并验证 conda 是否仍然有效并指向 base(即检查 which conda)。然后尝试从 fomc 中删除 conda 包,这样做 fomc 处于活动状态,即

conda remove -n fomc conda

应该是这样的。

【讨论】:

  • fomc 中删除 conda 解决了它!
猜你喜欢
  • 2022-11-21
  • 2018-08-20
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2021-06-23
相关资源
最近更新 更多