首页 > 解决方案 > 如何确定 conda 是否已经在 bash 脚本中的机器上可用?

问题描述

我想创建一个 bash 脚本来在 conda 中安装一个新的虚拟环境“ABC”。但是在我继续运行命令来创建这个环境之前,我想检查一下机器上是否已经安装了 conda。如果没有安装,我想安装 miniconda 然后创建环境“ABC”。如果已经安装了 conda,那么我将继续创建环境。(所有这些都应该发生在同一个脚本中)我只是想知道是否可以在 bash 脚本中检查 conda 的存在,然后继续进行其余的安装?

'''

#!/bin/bash
<code_to_check_existence_of_conda_env_here ?>
//If it does not exist, I will run the below code
mkdir -p miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O 
miniconda3/miniconda.sh
bash miniconda3/miniconda.sh -b -u -p ~/miniconda3
conda env update -f my_env.yml

'''

标签: linuxbashanacondaconda

解决方案


这里的主要问题是 Conda 有多个组件。加载哪些组件取决于 Conda 的安装方式以及 BASH 脚本在哪个用户下执行。我将尝试描述这些组件,希望您能决定什么是适合验证的。

康达组件

1:康达包

第一个是 Python 包conda,安装在 Anaconda/Miniconda/Miniforge基础环境中。如果基础环境被激活,可以测试

python -m conda

这将给出类似的东西

/path/to/python: No module named conda

如果它不存在。否则,它会输出conda入口点的文档。

2:康达入口点

conda作为 CLI的入口点位于condabinAnaconda/Miniconda/Miniforge 安装目录下。当用户运行conda init时,一个托管部分被添加到他们的 shell 初始化文件(.bashrc对于 Linux BASH),其中包括添加condabin到 PATH 的代码。这很可能是 OP 想要识别的,但是,使用 shebang 运行/bin/bash不会加载.bashrc文件。相反,一个人可能应该使用

#!/bin/bash -l

或者

#!/usr/bin/env bash -l

然后入口点可以位于

which conda

3:康达激活

最后,Conda 还包括一些纯 shell 函数,这些函数在前面提到的 shell 初始化代码中定义。这设置了一个中间人shell函数,也称为conda(本质上是别名),可以查看

type conda

此函数用于确定是否conda (de)?activate正在请求命令,这些命令是纯 shell 函数,还是需要转发到入口点的命令。

推荐

如果我设计这个,我会编写一个交互式脚本来检查 #2 ( which conda),如果它出现空白然后提示用户提供 PATH 到 Conda 入口点(也许他们将它安装在一个奇怪的地方或者没有运行conda init)或安装 Miniforge。1

我也不会使用基础环境来安装东西——这对最终用户来说是个坏主意,更不用说第三方了——而是创建一个新环境。我会用特定的默认环境名称提示用户,但也会为他们提供自定义选项。


[1]是的,Miniforge,而不是 Miniconda。Anaconda默认频道的商业用途现在需要付费许可证,因此最好使用免费的 Miniforge。


推荐阅读