업데이트(2024.08.01): pyenv uninstall 내용 추가
업데이트(2021.10.11): pyenv 설정 관련 값 추가
python으로 개발을 할 때 가상환경을 설정하는 상황이 꽤나 많아서 직접 포스팅을 하기로 하였습니다.
배경
파이썬으로 개발 혹은 어떠한 소프트웨어를 실행 할 때, 파이썬으로 된 환경에서 실행을 하려면 파이썬버전부터 해서 pip모듈까지 환경에 따라 설정해야 할 부분이 많은데 pyenv, virtualenv 그리고 autoenv를 이용하면 개발 하거나 파이썬 환경 세팅을 더 편하게 할 수 있다.
우선 요약
-
pyenv
: python의 가상환경을 설정 할 수 있도록 해주는 도구로 여러 버전의 파이썬을 사용 할 수 있다. -
virtualenv
: python의 가상환경으로 정해진 버전에서 pip모듈들을 각 가상환경에서 설치하고 실행 할 수 있도록 해준다. -
autoenv
: 특정 디렉토리에 들어갔을 때 virtualenv를 자동으로 실행시켜줍니다.
pyenv
pyenv란 python 버전에 따라서 가상환경 설정을 할 수 있도록 도와주는 도구입니다.
설치는 맥에서 아래와 같습니다.
brew install pyenv
그 다음 pyenv init
을 ~/.bash_profile
에 추가합니다. bash_profile에 추가하는것은 현재 OS(Mac이나 Linux)에 환경변수를 설정하는 부분이며 아래와 같습니다.
echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
다음 아래와 같은 명령어로 현재 pyenv에서 사용 가능한 파이썬 버전들을 볼 수 있습니다.
$ pyenv versions
* system (set by /Users/taewoo/.pyenv/version)
3.5.2
3.5.2/envs/LinkU
3.5.2/envs/pytest_practice
3.5.2/envs/tdd_book_practice
3.6.0
3.6.0/envs/FoodGroup
3.6.0/envs/LinkU
3.6.0/envs/djangogirls
FoodGroup
LinkU
LinkU_deprecated
djangogirls
pytest_practice
tdd_book_practice
다음 아래와 같이 pyenv install –list를 통해서 pyenv에 설치 할 수 있는 파이썬 버전들을 볼 수 있으며 해당 버전을 설치하면 됩니다.
$ pyenv install --list
...
$ pyenv install [version]
예시
pyenv install 3.5.2
최신 python 버전들을 사용하기 위해서는 pyenv를 git pull
하거나 update
를 해줘야하는데 update의 명령어가 더 편합니다.
pyenv update
virtualenv
virtualenv를 통해서 가상환견을 설정하고 그 가상환경 설정마다 pip 모듈을 설치해 현재 컴퓨터의 환경과 독립적으로 파이썬만의 환경을 설정 할 수 있습니다.
다음 아래처럼 설치를 해줍니다.
brew install pyenv-virtualenv
pyenv와 똑같이 아래처럼 ~/.bash_profile
에 추가합니다.
'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
source ~/.bash_profile
이제 실제로 가상환경을 만들어 보겠습니다. 사용예제는 아래 형태와 같으며 실제 명령어는 그 아래와 같습니다.
pyenv virtualenv [python version] [virtualenv name]
pyenv virtualenv 3.5.2 virtualenv-test
가상환경 삭제의 경우 아래와 같이 pyenv versions
명령어를 통해 나오는 가상환경을 pyenv uninstall [가상환경 디렉토리]
를 통해 삭제할 수 있습니다.
$ pyenv versions
* system (set by /home/twpower/.pyenv/version)
3.7.2
3.9.2
3.9.2/envs/test-env
3.10.2
3.10.2/envs/jupyter-notebook-env
jupyter-notebook-env --> /home/twpower/.pyenv/versions/3.10.2/envs/jupyter-notebook-env
test-env --> /home/twpower/.pyenv/versions/3.9.2/envs/test-env
$ pyenv uninstall 3.9.2/envs/test-env
pyenv: remove /home/twpower/.pyenv/versions/test-env? [y|N] y
pyenv-virtualenv: remove /home/twpower/.pyenv/versions/3.9.2/envs/test-env? (y/N) y
실제로 가상환경이 만들어지면 아래와 같이 “pyenv activate [virtualenv name]”을 명시하시면 되며 나갈 때는 반대로 “pyenv deactivate”을 통해서 나갈 수 있습니다.
pyenv activate [virtualenv name]
: [virtualenv name]라는 이름의 가상환경 실행(사전에 가상환경이 만들어져 있어야함)pyenv deactivate
: 현재 shell에서 실행된 가상환경을 종료
가상환경이 세팅되면 커맨드 라인 제일 앞줄에 (virtualenv name)
와 같이 가상환경이 실행되어 있음을 자동으로 나타내줍니다.
$ pyenv activate virtualenv-test
$ (virtualenv-test)...
$ (virtualenv-test)...pyenv deactivate
//원상태로의 복귀
autoenv
autoenv는 특정 디렉토리에 들어갔을 때 virtualenv가 자동으로 실행 될 수 있도록 도와주는 도구입니다.
설치는 아래와 같습니다.
$ brew install autoenv
똑같이 이제 ~/.bash_profile
에 추가를 합니다.
$ echo 'source /usr/local/opt/autoenv/activate.sh' >> ~/.bash_profile
$ source ~/.bash_profile
사용하는 방법은 가상환경을 실행하려는 디렉토리에서 다음과 같이 .env파일을 만들고 .env 파일 안에 아래 명령어처럼 원하는 가상환경을 입력해주시면 됩니다.
$ touch .env
$ echo "pyenv activate [virtualenv name]" > .env
예시는 아래와 같습니다.
$ touch .env
$ echo "pyenv activate virtualenv-test" > .env
이제 해당 디렉토리에 들어갈때마다 virtualenv가 실행이 됩니다.(해당 환경이 본 글과 같은 경우 virtualenv-test로 나옵니다.)
하지만 deactivate는 꼭 수동으로 해줘야합니다.