프로젝트 디렉토리 들어가면 자동으로 Conda 환경 불러오기 — direnv

U2 PIA
4 min readFeb 10, 2024

프로젝트 디렉토리에 들어갈 때 마다 conda activate를 할 필요 없이, 해당 디렉토리에 들어가기만 하면 지정된 환경을 셋팅할 수 있다.

  1. direnv를 설치한다.
sudo apt install direnv

2. bashrc의 끝에 다음을 추가한다.

# >>> my export init >>>
export iam="$(whoami)"
export CONDA_HOME="/home/${iam}/miniconda3"
export CONDA_DEFAULT_ENV="base"
[[ “:${PATH}:” != *”:${CONDA_HOME}/bin:”* ]] && export PATH=”${CONDA_HOME}/bin:${PATH}”
# <<< my export init <<<

# <<< direnv init <<<
# Ref Url: https://github.com/direnv/direnv/wiki/Python
show_conda_env() {
if [[ -n “$CONDA_DEFAULT_ENV” ]]; then
echo "($(basename $CONDA_DEFAULT_ENV))"
fi
}
export -f show_conda_env
# TURN OFF CONDA PROMPT CHANGE IF USING BELOW PROMPT
# USE THE FOLLOWING COMMAND TO TURN OFF CONDA PROMPT:
conda config --set changeps1 False
PS1='$(show_conda_env)'$PS1
eval "$(direnv hook bash)"
# <<< direnv init <<<

3. 홈 디렉토리에 .direnv 파일을 만들고 다음을 복사해 넣는다.

layout_anaconda() {
# Ref Url: https://github.com/direnv/direnv/wiki/Python
# local ANACONDA_HOME=”${HOME}/anaconda3"
# PATH_add “$ANACONDA_HOME”/bin
if [ -n "$1" ]; then
# Explicit environment name from layout command.
local env_name="$1"
source activate ${env_name}
elif (grep -q name: environment.yml); then
# Detect environment name from `environment.yml` file in `.envrc` directory
source activate 'grep name: environment.yml | sed -e 's/name: //' | cut -d "'" -f 2 | cut -d '"' -f 2'
else
(>&2 echo No environment specified);
exit 1;
fi;
}

4. 원하는 프로젝트 디렉토리에 .envrc 파일을 만들고, 다음과 같이 기재한다.

layout anaconda pt211
  • 여기에서 ‘pt211’을 원하는 environment 이름으로 바꿔준다.

5. direnv allow를 실행하여 변경된 사항을 등록한다.

$ direnv allow
  • .envrc 파일을 변경할 때 마다 이 명령을 실행해야 한다.

6. 이후부터는 이 디렉토리에 들어오면 자동으로 pt211 환경으로 바뀌고, 디렉토리에서 나오면 자동으로 deactivate 된다.

--

--