Проверьте наличие среды conda в Makefile - PullRequest
1 голос
/ 07 февраля 2020

Я создаю среду conda внутри Makefile. Однако, если эта среда уже создана, я бы хотел пропустить этот шаг. Как я могу проверить следующее:

  1. Уже существует среда с таким именем? Будет ли достаточно простой проверки каталогов?
  2. Эта среда уже активирована? Необязательный. Думаю, не повредит, если 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


1 Ответ

1 голос
/ 16 февраля 2020

Я решил проблему следующим образом:

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
...