나는 vscode를 사용하고 있다.
vscode + 콘다 사용하면서 Solving environment: failed with initial frozen solve. Retrying with flexible solve.
만큼 자주 마주치는 에러가 있다.
환경 설정할 때 터미널에서 which pip, which python로 확인했을 때 터미널이 가리키는 인터프리터와 conda가 가리키는 인터프리터가 다른 경우이다.
pyenv와 venv로 생성했던 인터프리터와 alias된 인터프리터로 환경이 꼬였다.
우선 가상환경을 해재해야 한다.
venv의 경우는 다음과 같이 가상환경을 종료할 수 있다.
deactivate
conda의 경우에는 다음과 같다.
conda deactivate
그럼에도 which pip, which python으로 확인한 pip와 python이 가리키는 인터프리터가 다를 경우가 있다. 이 경우에는 PATH 환경 변수를 확인할 필요가 있다.
echo $PATH
PATH 환경 변수에서 콜론(:)으로 구분된 순서 또한 중요하다. 만약 기본 파이썬 경로가 제일 앞서고 뒤에 conda 파이썬 경로가 출력된다면, 기본 파이썬이 항상 기본 값이 된다.
여기서 두가지 방법이 나뉜다.
1. 현재 실행 중인 쉘 세션에서만 conda 파이썬을 우선 참조하도록 할 것
2. 영구적으로 conda 파이썬 >> 기본 파이썬을 참조하도록 할 것
myenv라는 conda 가상환경이 있다고 가정한다.
기존에 있는 PATH 환경변수 앞에 conda 파이썬 경로를 추가한다.(macOS 기준)
export PATH="/opt/anaconda3/envs/{myenv}/bin:$PATH"
혹은 alias를 활용할 수도 있다.
alias python="/opt/anaconda3/envs/{myenv}/bin/python"
alias pip="/opt/anaconda3/envs/{myenv}/bin/pip"
이 두가지 방법은 다른 현재 터미널 세션에서만 적용되는 방법이다. 즉, 현재 터미널을 종료하거나 다른 터미널 창에서 실행하는 경우에는 적용되지 않는다.
macOS 기준 터미널 쉘 설정 파일은 다음과 같다.
bash의 경우
zsh의 경우
일반적으로 .bashrc는 .bash_profile 내부에서 로드된다.
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
위 코드는 .bash_profile 마지막에 추가해 .bash_profile이 .bashrc를 추적하도록 한다.
.bash_profile이 로그인 시 한 번만 실행되지만, .bashrc가 실행되면 .bash_profile이 실행된다.
.bash_profile의 전체 코드는 다음과 같다. 마찬가지로 .zshrc 또한 같은 코드로 적용할 수 있다.(다른 설정은 없다고 가정)
# Conda 초기화 코드를 .bash_profile에 추가
if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
. "/opt/anaconda3/etc/profile.d/conda.sh"
fi
# Conda 환경이 활성화되면, 그 환경의 bin 디렉토리가 PATH의 가장 앞에 위치하도록 설정
__conda_setup="$('/opt/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
. "/opt/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/opt/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
.bash_profile의 경우 앞서 언급한 .bashrc 추적 코드까지 추가하면 적용이 됐다.
위 내용을 저장하고, 쉘 소스로 지정하면 끝난다.
# bash인 경우
source ~/.bash_profile
# zsh인 경우
source ~/.zshrc