在设置使用带有 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\<you>\
。话虽如此,请遵循:
-
打开 Git Bash 并使用:
cd
转到您的主目录。只需输入这个,你就会进入你的主目录
输入此命令:ls -a
,您将看到所有文件,甚至是隐藏文件。寻找.bash_profile
和.bashrc
。两者都应该在场。如果是,您已准备好按照上述说明进行操作。但是,如果其中一个不存在或两者都丢失,请使用:touch .bashrc && touch .bash_profile
创建它们。当您再次键入时,您现在应该会看到这些文件:ls -a
就是这样。现在您有了.bashrc
和.bash_profile
,您可以按照上述说明进行操作。此外,为了更快地访问这两个文件,请使用 VS Code 像这样打开它们:code ~/.bashrc
或 code ~/.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-name
和conda 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连接Github桌面? VS Code只在寻找Git