[英]How to find out if conda is already available on a machine within a bash script?
我想創建一個 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 腳本在哪個用戶下執行。 我將嘗試描述這些組件,希望您能決定什么是適合驗證的。
第一個是 Python 包conda
,它安裝在 Anaconda/Miniconda/Miniforge基礎環境中。 如果基礎環境被激活,可以測試
python -m conda
這將給出類似的東西
/path/to/python: No module named conda
如果它不存在。 否則,它會輸出conda
入口點的文檔。
充當 CLI 的入口點conda
位於 Anaconda/Miniconda/Miniforge 安裝的condabin
目錄下。 當用戶運行conda init
時,會在他們的 shell 初始化文件(Linux BASH 的.bashrc
)中添加一個托管部分,其中包含將condabin
添加到 PATH 的代碼。 這很可能是 OP 想要識別的,但是,使用 shebang /bin/bash
運行將不會加載.bashrc
文件。 相反,一個人可能應該使用
#!/bin/bash -l
或者
#!/usr/bin/env bash -l
然后入口點可以位於
which conda
最后,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。
我不太擅長 bash 腳本,但我會執行一個命令:
pip3 freeze | grep conda
並根據輸出(如果退出狀態是否錯誤)安裝它或直接創建環境。
在您的機器上運行命令conda list
,安裝和未安裝時的輸出會有所不同,然后在輸出上運行 if 語句。
在 bash 中,如果我們要檢查是否安裝了軟件,則使用以下檢查。
if dpkg -l $SOFTWARE; then
<Do stuff>
鍵入conda activate
或conda activate env_name
如果已經安裝,第一個命令將激活基礎環境。 如果安裝了第二個命令,它將激活用戶創建的環境。
這聽起來像是實驗工具ensureconda
旨在解決的預期問題。 但是,這需要使用 pip 安裝 Python:
pip install ensureconda
以下是命令選項:
$ ensureconda --help
Usage: ensureconda [OPTIONS]
Ensures that a conda/mamba is installed.
Options:
--mamba / --no-mamba search for mamba
--micromamba / --no-micromamba search for micromamba, install if not
present
--conda / --no-conda search for conda
--conda-exe / --no-conda-exe search for conda.exe / conda-standalone,
install if not present
--no-install don't install conda/mamba if no version can
be discovered
--min-conda-version VERSIONNUMBER
minimum version of conda to accept (defaults
to 4.8.2)
--min-mamba-version VERSIONNUMBER
minimum version of mamba/micromamba to
accept (defaults to 0.7.3)
--help Show this message and exit.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.