virtualenv는 디렉토리 단위로 가상의 Python 환경을 구성함에 있어 굉장히 강력합니다. 이 점에 대해선 반박할 여지가 없는데, 한 가지 단점이라면 가상 환경이 한 곳에서 관리되지 않아 기억하기 번거롭다는 것입니다. virtualenvwrapper를 사용할 경우, 터미널이 현재 위치한 경로와 관계 없이 가상 환경을 활성화할 수 있다는 장점이 있습니다. 조금의 설정 과정을 거치고 나면, 더욱 더 편하게 virtual environment를 관리하고 사용할 수 있게 됩니다. virtualenvwrapper는 내부적으로 virtualenv를 의존합니다.

$ pip3 install virtualenvwrapper

가상 환경을 관리할 디렉토리 생성 & 환경 변수 설정

먼저 홈 디렉토리로 이동합시다.

$ cd ~

가상 환경이 들어갈 디렉토리를 생성합니다. .venvs 라는 이름을 사용하겠습니다.

$ mkdir .venvs

이제 홈 디렉토리의 .bashrc.zshrc, .profile처럼 쉘의 환경 변수를 관리할 수 있는 곳에 WORKON_HOMEVIRTUALENVWRAPPER_PYTHON 환경 변수를 export하고, virtualenvwrapper.sh를 실행하도록 설정합니다.

export WORKON_HOME=~/.venvs
export VIRTUALENVWRAPPER_PYTHON="$(which python3)"
source /usr/local/bin/virtualenvwrapper.sh

virtualenvwrapper! 써보자!

mkvirtualenv [venv_name]

mkvirtualenvvenv_name을 이름으로 하는 가상 환경을 생성합니다.

$ mkvirtualenv test
Using base prefix '/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/planb/.venvs/test/bin/python3.6
Also creating executable in /Users/planb/.venvs/test/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /Users/planb/.venvs/test/bin/predeactivate

(...)

virtualenvwrapper.user_scripts creating /Users/planb/.venvs/test/bin/get_env_details
(test) $

가상 환경이 생기고, 즉시 activate됩니다. virtualenvwrapper는 virtualenv를 의존하고 있기 때문에, 명령어도 꽤 유사합니다. 가상 환경에 다른 Python 버전을 사용하고자 하는 경우 virtualenv 때처럼 -p--python 인자를 사용하면 됩니다.

$ mkvirtualenv -p python2 test_python2
Running virtualenv with interpreter /usr/local/bin/python2
New python executable in /Users/planb/.venvs/test_python2/bin/python2.7
Also creating executable in /Users/planb/.venvs/test_python2/bin/python
Installing setuptools, pip, wheel...done.

(...)

virtualenvwrapper.user_scripts creating /Users/planb/.venvs/test_python2/bin/get_env_details
(test_python2) $

가상 환경을 빠져나오려면, virtualenv와 동일하게 deactivate를 사용합니다.

(test_python2) $ deactivate
$

workon ([venv_name])

workon 명령은 venv_name에 해당하는 가상 환경에 진입하거나, venv_name이 전달되지 않는 경우엔 가상 환경의 목록을 불러옵니다.

(test_python2) $ workon
test
test_python2
(test_python2) $ workon test
(test) $

rmvirtualenv [venv_names ...]

rmvirtualenv 명령은 venv_names에 해당하는 가상 환경을 모두 제거합니다.

$ rmvirtualenv test test_python2
Removing test...
Removing test_python2...

제거하려는 가상 환경에 workon(activate)되어 있다면, 오류가 발생합니다.

(test) $ rmvirtualenv test
Removing test...
ERROR: You cannot remove the active environment ('test').
Either switch to another environment, or run 'deactivate'.


+ Recent posts