linux - 如何确定 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
'''
解决方案
这里的主要问题是 Conda 有多个组件。加载哪些组件取决于 Conda 的安装方式以及 BASH 脚本在哪个用户下执行。我将尝试描述这些组件,希望您能决定什么是适合验证的。
康达组件
1:康达包
第一个是 Python 包conda
,安装在 Anaconda/Miniconda/Miniforge基础环境中。如果基础环境被激活,可以测试
python -m conda
这将给出类似的东西
/path/to/python: No module named conda
如果它不存在。否则,它会输出conda
入口点的文档。
2:康达入口点
conda
作为 CLI的入口点位于condabin
Anaconda/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。
推荐阅读
- c# - mvc和api项目的路由冲突
- rust - 当某些项目需要替换时,实现“IntoIterator”的惯用方式是什么?
- c# - Roslyn 访问和评估调用参数
- java - 在 Java 类中使用 Kotlin 类时在 Android Studio 中重建项目时出现问题
- python - 加载html(Python)时如何将cookie添加到selenium webdriver
- javascript - 多个 sizeColumnsToFit() ag-grid React
- image-processing - 如何将 SimpleITK 图像重新采样到相同的方向(即视图)?
- javascript - Material UI Modal 状态变化的空白页
- typescript - 输入承诺
没有呼叫签名 - excel - Excel:标准偏差,忽略范围内的#NA和空白