在设置使用带有 VS Code 和集成 Git 终端的 anaconda 时卡住了

Posted

技术标签:

【中文标题】在设置使用带有 VS Code 和集成 Git 终端的 anaconda 时卡住了【英文标题】:Stuck when setting up to use anaconda with VS Code and Integrated Git terminal 【发布时间】:2019-12-24 20:48:15 【问题描述】:

我想学习数据科学,因此使用了一些非常流行的 Python 模块,如 Pandas、Matplotlib、Numpy 等。所以我清理了安装的 Anaconda,现在将其用作我的默认 Python 解释器,并使用 Conda 安装包和制作虚拟环境。我使用 VS Code 作为我的日常文本编辑器。但是我在使用 VS Code 中的集成 Git 终端和 Anaconda Python 解释器时遇到了一些问题。

我面临几个问题。我看到的第一个问题是当我使用 CMD 运行 Python 时。如果我在cmd中输入python,就会出现anaconda提供的Python解释器。但我也收到警告:

警告: 此 Python 解释器处于 conda 环境中,但尚未激活该环境。库可能无法加载。要激活此环境,请参阅https://conda.io/activation

我没想到会得到这个输出。无论如何,VS 代码中还有另一个问题。但首先我想提一下,我在安装 Anaconda 时检查了“添加到 PATH”,所以那里没有问题。现在,当我在 VS Code 中打开一个新终端时,会自动运行 C:/Users/User/Anaconda3/Scripts/activate,然后运行 ​​conda activate base。但是当conda activate base 自动运行时,如前所述,我得到一个CommandNotFoundError。它声明Your shell has not been properly configured to use 'conda activate'. If using 'conda activate' from a batch script, change your invocation to 'CALL conda.bat activate'

然后我被告知要初始化我的 shell,所以我做了conda init bash,但仍然没有运气。这让我谈谈.bash_profile。我认为这与这个 bash 配置文件有关。无论如何,这就是我的 bash 个人资料中的内容


# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
eval "$('/C/Users/User/Anaconda3/Scripts/conda.exe' 'shell.bash' 'hook')"
# <<< conda initialize <<<

只是问题的总结:

运行 Anaconda Python 解释器时 CMD 中出现意外警告

在 VS Code 中打开新终端时自动运行 Anaconda 脚本和 conda activate base

Conda init bash 没有帮助

P.S 我曾尝试在 CMD 和 Git Bash 中使用 conda activate [env_name],它们可以正常工作。换句话说,Anaconda 和 Conda 在 VS Code 终端之外完美地工作。

【问题讨论】:

【参考方案1】:

我自己想出了答案,想在这里分享。首先,在撰写问题时,我在 VS Code 中使用 Git Bash 作为终端(我仍在使用它)。所以问题是,当我在 Git Bash 或 VS 代码终端中运行命令 conda init bash 时,Conda 基本上只是将用于激活 Conda 环境的命令放在 .bash_profile 中,因为它是在登录 Bash 期间获取的。但是 VS Code 中的集成终端是 Git Bash 会话的子外壳。这就是为什么 .bash_profile 不在 VS Code 中获取,因为 .bash_profile 仅在主 Bash 会话期间获取。 .bashrc 文件是在 VS Code 中创建终端会话时获取的文件。所以你真正需要做的是将conda init bash放入.bash_profile的代码粘贴到你的.bashrc文件中,然后自动生成.bash_profile源代码.bashrc文件。

所以,总而言之,使用 conda init bash 会将 conda 命令放在 .bash_profile 中,它通常来自 Git Bash,但 VS Code Git Bash 终端将使用 .bashrc

因此,您可以将代码从.bash_profile 剪切并粘贴到.bashrc(如前所述),或者如果您愿意,只需按照以下步骤操作:将此代码放入您的.bash_profile

if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi

在您的.bashrc 中输入以下代码:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
eval "$('path_to_your_conda.exe' 'shell.bash' 'hook')"
# <<< conda initialize <<<
# You can get conda.exe path by using `which conda` in Git Bash

现在,当您在 VS Code 终端中打开 Git Bash 会话时,您可以使用 conda activate env_name 激活您拥有的任何环境。

现在一切都应该在 VS Code 终端中按预期工作,但我想进一步详细说明一些事情。如果您愿意,您可以跳过conda init bash 流程(不推荐,请继续阅读以获取更多知识,但请仅按照上述步骤操作)。这是 conda 4.4.0 中引入的功能。到那时激活 conda 环境的方法是使用source activate,但该命令不是跨平台的,这意味着该命令不能在 Windows 等操作系统中使用。 因此,他们通过引入诸如conda activate env_name 之类的命令进行了这一更改,以便尽管有操作系统平台,但 conda 环境变得更易于使用。

conda activate 还有其他优点。这直接来自他们的release docs:

conda activate:对环境激活的逻辑和机制进行了重新设计。在 conda 4.4 中,conda activate 和 conda deactivate 现在是激活和停用环境的首选命令。您会发现它们比以前 conda 版本中的 source activate 和 source deactivate 命令要灵活得多。 conda activate 命令还具有以下优点:(1) 在所有操作系统、shell 和平台上通用,以及 (2) 不会与 Python virtualenv 的 activate 脚本等其他包中的脚本发生路径冲突。

我使用this question 作为参考。查看它以了解更多信息。

话虽如此,使用source activate env_name 仍然可以工作如果您正在使用 Git Bash,即使在 VS Code Git Bash 终端中也是如此。 source activate env_name 不需要事先设置或配置。但强烈建议您只使用conda init 设置所有内容,然后使用conda activate env_name

[注意]:在Windows 上定位和修改上述.bashrc.bash_profile 通常不像在Linux 上那么简单。但是可以像这样相当容易地完成:

不用说,你应该安装 Git Bash。据我所知,安装 Git Bash 后应该会自动创建 .bashrc.bash_profile 或两者兼而有之。这些文件被称为“点文件”(因为它们以点开头),默认情况下这些文件在大多数操作系统上是隐藏的,在 Windows 上肯定是隐藏的。如果它们是由 Git Bash 在您的系统上自动创建的,它们很可能被放置在您的主目录中。 Windows 上的主目录是C:\Users\&lt;you&gt;\。话虽如此,请遵循:

    打开 Git Bash 并使用:cd 转到您的主目录。只需输入这个,你就会进入你的主目录 输入此命令:ls -a,您将看到所有文件,甚至是隐藏文件。寻找.bash_profile.bashrc。两者都应该在场。如果是,您已准备好按照上述说明进行操作。但是,如果其中一个不存在或两者都丢失,请使用:touch .bashrc &amp;&amp; touch .bash_profile 创建它们。当您再次键入时,您现在应该会看到这些文件:ls -a 就是这样。现在您有了.bashrc.bash_profile,您可以按照上述说明进行操作。此外,为了更快地访问这两个文件,请使用 VS Code 像这样打开它们:code ~/.bashrccode ~/.bash_profile。现在,按照说明修改这两个文件。

在问题中,我还谈到了 VS Code 自动激活 Conda 环境。 VS Code 这样做没有问题,因为这是默认行为。 我误解了这是一个问题。但如果有人想阻止 VS Code 自动执行此操作,我建议尝试在用户设置中进行设置:

"python.terminal.activateEnvironment": false

【讨论】:

我发现在 git bash 终端中使用 bash -l 命令似乎可以完成您想做的事情,即 VS Code 现在将在 conda init 步骤之后引用 .bash_profile 文件(运行一次)无需创建或编辑任何配置文件。我认为这似乎符合您的意图。我已经在下面的答案中提出了这一点。 很好的解决方案!这也很好。但它实际上并没有运行一次。每次您希望在 VS Code 终端中使用 Git Bash 激活环境时,您需要运行 bash -l。你可以把这个bash -l 放在你的.bashrc 中,这样它就会被自动调用。 这太棒了!我只需要将我的 ~/.bash_profile 复制到 ~/.bashrc 和 source ~/.bashrc,然后一切都很好:)【参考方案2】:

编辑:比使用source activate 获得conda activate 命令在VS Code 中的git bash 终端中工作更好的解决方案:

    在 VS Code 的 Git Bash 终端中运行 conda init 在 VS Code 的 Git Bash 终端中输入 bash -l 以将您配置的 shell 作为登录 shell 启动 您现在应该可以正常运行conda activate 命令了!

更多信息:bash -l 运行您的 ~/.profile/~/.bash_profile/~/.zprofile 脚本,其中实际引用了 conda 可执行文件(但其中 Git Bash 作为集成终端默认不运行并引用)。因此,git bash 在运行conda activate 命令时不知道在哪里搜索 conda,并且根据上面 Arafat 的解释,运行 conda init 会更改此 .bash_profile 文件中的 git bash 路径,但作为 VS 中的 git bash 终端无效代码实际上并没有引用这个文件!更多信息在VS Code's official docs。


作为对已接受答案的解释的补充,我发布了一个对我有用的解决方案here,它可能会帮助其他人(更改用户设置并没有解决我的问题)。如果以下或上面接受的答案不起作用,链接也可以指向其他有效的解决方案。

注意:请在尝试下面的source activate 方法之前阅读阿拉法特的回答,以了解为什么通常不推荐使用它。这就是说留下它,因为它仍然可以解决问题。

以下是在 VS Code 中使用 Git Bash 终端对我有用的方法 简洁步骤中的窗口:

    source activate env-name - 您现在应该会看到您的行附加了 (base) 标记。

    调用source activate 后,我发现以下conda activate 命令可以工作:即conda activate env2-name

Git Bash(作为 VS Code 终端)对我不起作用的地方:activate env-nameconda activate env-name

【讨论】:

你好。在阅读了您的答案后,我进行了更多研究并更新了我的答案,我相信这可能是解决这个问题的一个相当完整的解决方案。我添加了更多信息,还包含了有用的代码来帮助其他人快速解决这个问题。此外,我还提供了有关您使用 source activate 的信息。请阅读我的更新答案,以了解更多关于为什么应该正确设置 conda(以及如何设置)以及为什么只应该使用 conda activate 感谢阿拉法特,改变了我的答案并学到了关于source activate 命令的新知识!可能是一个新手问题 - 但我仍然不清楚在哪里可以找到正确的 .bashrc.bash_profile 来修改你的答案?也许您可以为这些提供文件路径,如果找不到它们该怎么办?搜索窗口,我在我的 git 安装的 etc 文件夹中找到了一个 bash.bashrc 文件,在我的 WSL 安装文件夹中找到了几个 .bashrc 文件,但我不确定这些文件是否正确 感谢您提醒我,定位这两个文件对某些人来说可能是个问题。我已经更新了我的答案,提供了有关如何找到它们或在它们已经不存在时如何创建它们的明确详细信息。请检查一下。【参考方案3】:

一年后我仍然遇到这个问题。以下是基于阿拉法特回答的简化和更新的方法。

    安装 Git Bash

    配置要在 VSC 中使用的 Git Bash(请参阅 How do I use Bash on Windows from the Visual Studio Code integrated terminal?)

    从 VSC 打开 git bash 终端

    如果 conda activate 运行成功,则跳过其余部分

    运行

    conda 初始化 bash

    检查现有的 bash 点文件:

    ls -al ~/.bash*

    可能只有一个 '.bashrc' 和 '.bash_profile' 存在

    检查现有的点文件以获取 conda 初始化代码 例如

    猫 ~/.bash_profile

这包括在我的案例中 '>>> conda initialize >>> ...' 代码 (但是,这就是问题的根源,它在终端打开时没有执行。要检查执行了哪些文件,只需在每个文件中添加 'echo hello-X'。)

    要解决这个问题,我们必须创建丢失的点文件并使其执行之前存在的 OTHER:

    tee -a ~/.bashrc

    如果 [ -f ~/.bash_profile ];那么

    来源 ~/.bash_profile

    fi

    结束

    在 VSC 中重新打开终端

【讨论】:

以上是关于在设置使用带有 VS Code 和集成 Git 终端的 anaconda 时卡住了的主要内容,如果未能解决你的问题,请参考以下文章

VS Code - Cygwin 作为集成终端

VS Code Git 扩展 API

为什么我无法使用VS Code连接Github桌面? VS Code只在寻找Git

如何为 VS Code 的集成终端设置节点版本?

如何在 Ubuntu on Windows (WSL) 上为我的 VS Code 终端使用 Bash?

vs code 快捷键