代码之家  ›  专栏  ›  技术社区  ›  Lukasz Tracewski

检查Makefile中现有的conda环境

  •  0
  • Lukasz Tracewski  · 技术社区  · 5 年前

    我正在Makefile中创建conda环境。但是,如果这个环境已经创建,我想跳过这一步。如何检查以下各项:

    1. 此环境是否已激活?可选。我认为,如果env被激活两次不会有什么伤害。
    CONDA_ENV_NAME := myname
    
    ifeq (,$(shell which conda))
        HAS_CONDA=False
    else
        HAS_CONDA=True
        CONDA_ACTIVATE=source $$(conda info --base)/etc/profile.d/conda.sh ; conda activate ; conda activate
    endif
    
    environment:
    ifeq (True,$(HAS_CONDA))
        @echo ">>> Detected conda, creating conda environment."
        ## Here I'd like to check if this environment already exists
        conda env create -f environment.yml -n $(CONDA_ENV_NAME)
        ## ... and if the env should be activated (optional)
        $(CONDA_ACTIVATE) $(CONDA_ENV_NAME)
    else
        @echo ">>> Install conda first."
    endif
    
    
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Lukasz Tracewski    5 年前

    我用以下方法解决了这个问题:

    ifeq (,$(shell which conda))
        HAS_CONDA=False
    else
        HAS_CONDA=True
        ENV_DIR=$(shell conda info --base)
        MY_ENV_DIR=$(ENV_DIR)/envs/$(CONDA_ENV_NAME)
        CONDA_ACTIVATE=source $$(conda info --base)/etc/profile.d/conda.sh ; conda activate ; conda activate
    endif
    
    environment:
    ifeq (True,$(HAS_CONDA))
    ifneq ("$(wildcard $(MY_ENV_DIR))","") # check if the directory is there
        @echo ">>> Found $(CONDA_ENV_NAME) environment in $(MY_ENV_DIR). Skipping installation..."
    else
        @echo ">>> Detected conda, but $(CONDA_ENV_NAME) is missing in $(ENV_DIR). Installing ..."
        conda env create -f environment.yml -n $(CONDA_ENV_NAME)
    endif
    else
        @echo ">>> Install conda first."
        exit
    endif