pyenv 와 Anaconda 병행 사용

PyEnv + Anaconda

개발환경은

  • Ubuntu 16.04 or later
  • Windows 7 or later
  • macOS 10.12.6 (Sierra) or later (no GPU support)
  • Raspbian 9.0 or later

pyenv 와 pyenv-virtualenv 기반으로 Anaconda 를 사용하려고 한다. pyenv로 배포본을 관리를 하고, pyenv-virtualenv와 conda 환경의 가상환경을 이용한다.

  1. pyenv-Anaconda 환경
  • ananconda 와 miniconda
  1. anaconda & miniconda 복합환경

1. pyenv - Anaconda 설치

설치할 anaconda 버전을 확이한다.

1
$ pyenv install -l |grep anaconda

anaconda 를 설치한다 - 시간이 많이 걸린다.

1
2
3
4
$ pyenv install anaconda3-5.3.1
Downloading Anaconda3-5.3.1-MacOSX-x86_64.sh.sh...
-> https://repo.continuum.io/archive/Anaconda3-5.3.1-MacOSX-x86_64.sh
...

anaconda3-5.3.1 버전을 전역에서 사용하도록 한다.

1
$ pyenv global anaconda3-5.3.1

global로 지정하고 버전을 확인해 보면

1
2
3
4
$ pyenv versions
system
3.8.1
* anaconda3-5.3.1 (set by /Users/qkboo/.pyenv/version)

일반적으로 Anaconda 만을 사용한다면 설치후 사용자 쉘 환경에서 conda 를 사용하기 위해서 환경변수를 초기화 해야 하는데 다음 명령으로 실행한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ conda init bash
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/condabin/conda
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda-env
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/activate
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/deactivate
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.sh
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/fish/conf.d/conda.fish
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/shell/condabin/Conda.psm1
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/shell/condabin/conda-hook.ps1
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/xontrib/conda.xsh
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.csh
modified /Users/qkboo/.bash_profile

==> For changes to take effect, close and re-open your current shell. <==

위 명령은 아래 환경 변수가 작용해서 conda 의 가상환경을 다루는 쉘 스크립을 실행해 준다.

1
2
3
4
5
NACONDA_HOME=/Users/who/anaconda3
PATH=$PATH:$ANACONDA_HOME/bin

export ANACONDA_HOME
export PATH

쉘을 다시 열면 쉘 프롬프트가 변경된다.

1
(base) qkboo@ ~$

pyenv 기반 Anaconda 사용

그런데 pyenv 에서 다른 배포본과 Ananconda 를 같이 사용한다면 conda 초기 환경이 아주 불편할 수 있어서 아래 같이 conda 가상환경 시작을 불가능하게 해야 한다.

init conda, the following command write scripts into your shell init file automatically

1
2
3
4
conda init

# disable init of env "base"
conda config --set auto_activate_base false

보통 conda init 를 해주면 쉘 스크립의 마지막 위치에 삽입된다. 그러므로 .bash_profile 에 있는 pyenv 초기화가 항상 마지막에 실행되도록 하자.

1

pyenv 와 anaconda 환경의 전환 정리

Examples of managing virtual environments.

1
2
3
4
5
6
# virtual environments from pyenv
pyenv install 3.6.9
pyenv virtualenv 3.6.9 new-env
pyenv activate new-env
pyenv deactive
# You can also use `pyenv local`
1
2
3
4
5
# virtual environments from conda
conda create -n new-env python=3.6
conda env list
conda activate new-env
conda deactivate
1

1

anaconda 패키지와 환경관리를 할 수 있는 conda 명령어 몇가지를 소개

1
2
3
4
5
6
7
8
9
10
11
// 아나콘다의 버전 확인
conda --version

// 아나콘다 버전 업데이트
conda update conda

// 설치된 패키지 리스트
conda list

// conda 통해 설치 가능한 패키지 검색
conda search "tensorflow"

conda에서 개발 준비하기

Anaconda 설치가 완료되면 conda 명령으로 TensorFlow를 사용할 환경을 구성하고 사용해 보자.

가상환경 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ conda create -n tensorflow_env

...

The following packages will be downloaded:

package | build
---------------------------|-----------------
pip-20.0.2 | py37_1 1.9 MB
tensorboard-2.0.0 | pyhb38c66f_1 3.3 MB
...

The following NEW packages will be INSTALLED:

_tflow_select: 2.3.0-mkl
...

Proceed ([y]/n)?

또한 python= 인자로 파이썬 버전을 지정할 수 있다.

1
$ conda create -n tensorflow python=3.8

현재 생성한 가상환경을 확인해 보자,

1
2
3
4
5
(base)$ conda env list
# conda environments:
#
base * /Users/qkboo/.pyenv/versions/anaconda3-5.3.1
deep-learning /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/envs/deep-learning

새로만든 conda 가상환경을 활성화 한다.

1
2
$ conda activate tensorflow_env
(tensorflow_env) qkboo@ ~$

가상환경에서 Jupyter Notebook 을 설치한다.

jupyter notebook 설치

활성화한 가상환경에서 Jupyter Notebook 을 설치한다.

1
(tensorflow_env)$ conda install jupyter notebook

필요시 nb-extension 설치

1
2
3
4
5
6
7
8
9
10
(tensorflow_env)$ conda install -c anaconda-nb-extensions nb_conda
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

environment location: /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/envs/deep_learning

added / updated specs:
- nb_conda

2. anaconda & miniconda 복합환경

현재 시스템에 pyenv로 파이썬 환경이 anaconda, miniconda 그리고 python 3.9 등이 중복되어 설치되어 있다. pyenv 가 중심이 되어 conda 를 다루기 위해서 miniconda 를 우선으로 구성되어 있다. shell 스크립트 부분이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/qkboo/.pyenv/versions/miniconda3-latest/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/Users/qkboo/.pyenv/versions/miniconda3-latest/etc/profile.d/conda.sh" ]; then
. "/Users/qkboo/.pyenv/versions/miniconda3-latest/etc/profile.d/conda.sh"
else
export PATH="/Users/qkboo/.pyenv/versions/miniconda3-latest/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<

# Pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

현재 pyenv 로 설치한 파이썬 환경을 살펴보면,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
qkboo@ ~$ pyenv versions
system
3.8.1
* 3.8.7 (set by /Users/qkboo/.pyenv/version)
3.8.7/envs/opencv4
3.8.7/envs/tf2_build
3.9.1
anaconda3-5.3.1
anaconda3-5.3.1/envs/opencv3
anaconda3-5.3.1/envs/opencv4
anaconda3-5.3.1/envs/py27
miniconda3-latest
miniconda3-latest/envs/deep_learning
miniconda3-latest/envs/django3
miniconda3-latest/envs/tf24_cpu
miniconda3-latest/envs/tf2_p37
miniconda3-latest/envs/tkinter
opencv4
tf2_build

conda 툴을 사용하는 anaconda, miniconda 가 혼재된 환경에서 pyenv로 가상환경을 즉시 활성화 시키면 conda 명령 실행에 혼선을 일으킨다. 예를 들어 위의 가상환경 anaconda3-5.3.1/envs/opencv4 을 pyenv로 활성화 하고 python, conda 명령을 실행해 보면

1
2
3
4
5
~$ pyenv shell opencv4
~$ pyenv version
opencv4 (set by PYENV_VERSION environment variable)
~$ which python
/Users/qkboo/.pyenv/shims/python

가상환경의 python 위치를 확인해 보고, conda 명령을 찾아 보자,

1
2
3
4
5
6
7
8
9
~$ pyenv which python
/Users/qkboo/.pyenv/versions/opencv4/bin/python

$ pyenv which conda
pyenv: conda: command not found

The `conda' command exists in these Python versions:
anaconda3-5.3.1
miniconda3-latest

pyenv 환경 아래 2개의 conda 때문에 혼선이 나타난다.

예를 들어 현재 쉘 환경에서 파이썬 환경 ananconda3-5.3.1 을 사용하도록 하고, conda 를 확인해 보면 명확하게 해당 파이썬 환경의 anaconda 의 가상환경을 가르키지만! conda env 명령의 결과는 다르게 나타낸다.
anaconda 뒤에 minicond를 설치해서 miniconda 가상환경이 우선으로 나타난다.

1
2
3
4
5
6
7
8
9
10
11
12
~$ pyenv shell anaconda3-5.3.1
~$ pyenv which conda
/Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda
~$ conda env list
# conda environments:
#
base * /Users/qkboo/.pyenv/versions/miniconda3-latest
deep_learning /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/deep_learning
django3 /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/django3
tf24_cpu /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/tf24_cpu
tf2_p37 /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/tf2_p37
tkinter /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/tkinter

그래서 가상환경 활성화시 가상환경 디렉토리를 지정해서 사용하자!

그래서 anaconda 와 miniconda 환경을 활성화 시키려면 shell, local, system 명령을 통해 설치된 파이썬 환경을 활성화 하고, 해당 파이썬 환경에서 가상환경을 다루는 것이 좋다.

예를 들어 현재 쉘 환경에서 파이썬 환경 ananconda3-5.3.1 을 사용하도록 실제 가상환경 위치를 지정해서 활성화 한다.

1
2
~$ conda activate .pyenv/versions/anaconda3-5.3.1/envs/opencv4/
(opencv4) ~$
Author

Gangtai Goh

Posted on

2021-09-07

Updated on

2023-05-12

Licensed under

댓글