Python 기본 환경 구축하기 (pyenv, virtualenv, autoenv)

한지승
HASHBOX
Published in
7 min readApr 27, 2019
Pyenv, Virtualenv, Autoenv 환경변수 설정

Python을 시작하신지 얼마 안되신 분들은 Python을 사용하기 전에 pyenv, virtualenv, autoenv를 설치하는 이유에 대해서 잘 모르실수도 있습니다. 저또한 처음 시작할 때 굳이 번거롭게 설치할 필요가 있나 했던 적이 있습니다. 지금와서 생각해보면 그런 생각을 할 수 밖에 없는 이유는 대부분 Python 단일 프로젝트로 작업하시거나 또는, 그냥 Python의 패키지들을 전역으로 설치해놓코 사용하시는데 문제가 없으신 분들이라 생각됩니다. 지금부터 pyenv, virtualenv, autoenv가 왜 필요한지에 대해서 설명드리도록 하겠습니다

기본적인 이유

일단 Python을 설치하실 때 2.7버전때와 3.6버전으로 두가지로 나뉘어져 있는 것을 알 수 있습니다. 두 버전간에 매우 큰 변화가 있었기 때문에 기존에 존재하던 패키지들과의 호환이 안맞기도하고 없어진 기능들도 있고 이런 저런 이유들로 공존하고 있는 상황입니다. 그렇기 때문에 처음 설치하실 때도 무엇을 깔아야 하는지 모르신 분들도 많으십니다.

이처럼 Python을 설치하는데 있어서도 어떠한 버전을 깔아야할지 헷갈리는 부분들도 있고, 버전에 따라서 호환되는 패키지 버전들도 다르기 때문에 의존성에 굉장히 민감합니다. 프로젝트를 진행하게되면 프로젝트에 따라서 어떤 버전을 사용하고, 어떤 패키지를 사용하고, 또 같은 패키지라도 특정 패키지버전만 호환이 되고 그러한 문제들이 많습니다. 그럴때마다 기존에 Python을 바로 설치해서 사용하시던 분들은 특정 버전으로 Python을 설치해야하기도하며 또는 특정 프로젝트 때문에 상위 버전의 패키지를 사용해야하는데 다른 프로젝트가 패키지를 사용하지 못하는 경우가 발생됩니다. 이를 해결하기 위해서 pyenv, virtualenv, autoenv가 나타나게 됩니다.

pyenv

우선 pyenv는 시스템 내에 여러 버전의 Python을 설치하고 관리할 수 있는 기능을 제공합니다. 그렇기 때문에 특정 프로젝트는 Python 2.7버전을, 또 다른 프로젝트는 Python 3.6버전을 사용한다면 간단하게 Python 버전을 스위치하듯 바꿔가면서 사용이 가능합니다. 이렇게 되면 Python 버전에 대한 프로젝트 의존성이 해결이 됩니다. 하지만 Python은 기본적으로 각각의 버전마다 패키지를 설치하는 공간을 가지고 있게 되는데 Python을 같은 버전을 사용하더라도 사용하는 패키지의 버전을 다르게 사용의 필요성이 생깁니다. 이를 해결하기 위해 virtualenv가 나옵니다.

virtualenv

virtualenv는 프로젝트의 폴더마다 패키지(모듈) 설치하는 공간을 격리해주는 역할을 합니다. 즉, pyenv로 Python의 버전을 격리하고, virtualenv로 격리된 Python버전 내에서 패키지 공간을 격리해주는 역할을 해주게 됩니다. 이를 통해 각각의 프로젝트마다 특정 Python버전과 특정 패키지를 관리할 수 있기 때문에 프로젝트간에 종속성을 없애주는 역할을 합니다. 결과적으로 프로젝트만을 위한 Python 버전과 패키지 버전을 격리된 가상공간에서 사용이 가능하게 됩니다.

autoenv

마지막으로 autoenv는 일종의 트윅 같은 역할을 하게 되는데, pyenvvirtualenv환경을 구축하게 되면 특정 프로젝트를 사용할 때마다 `pyenv` 로 격리시킨 Python 버전과 virtualenv로 격리시킨 패키지 구역을 사용하게다라는 커맨드를 쉘에 입력해야하는 번거로움이 있습니다. *~~개발자들에게는 엄청나게 구찮은 일이랍니다..~~* 그래서 위와같은 특정한 환경을 필요로하는 프로젝트 폴더 내에 격리시키기 위한 커맨드 관련 파일을 만들어 놓고, 개발자가 해당 프로젝트 폴더에 진입했을 때 해당하는 명령어가 자동으로 실행되게 해주는 역할을 해줍니다. 즉, 굳이 프로젝트마다 어떠한 환경으로 실행하라는 것을 외우지도 않고, 따로 칠 필요도 없이 프로젝트에 진입하게 되면 자동으로 격리시키게끔 만들어주는 역할을 합니다.

설치 및 사용방법

필자는 macOS에서 작업을 하기 때문에 macOS에서의 사용방법을 알려드리도록 하겠습니다.

설치

각자의 역할을 알았으니 설치하는 방법에 대해서 간단하게 알아보도록 하겠습니다. 기본적으로 macOS를 사용하시는 분들께서는 Homebrew가 깔려 있으실 텐데요, 없으신 경우에는 해당 링크로 가셔서 설치방법대로 설치해주세요~!

설치를 모두 완료하시고 나서는 다음과 같이 설치를 진행합니다.

brew updatebrew install pyenvbrew install pyenv-virtualenvbrew install autoenv

설치가 완료되신 다음에는 프로파일에 몇줄을 추가해주셔야 정상적으로 작동이 가능합니다.

echo 'eval "$(pyenv init -)"' >> ~/.bash_profileecho 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profileecho 'source $(brew --prefix autoenv)/activate.sh'

1~2번째 줄은 pyenvvirtualenv의 초기 필요한 작업들을 실행해주는 역할을 합니다. 3번째 줄은 프로젝트 폴더에 진입할 때 .env파일의 스크립트를 자동으로 실행하게 해주는 스크립트입니다.

사용방법

pyenv

pyenv versions

위와 같은 명령어를 칠 경우 현재 시스템에 pyenv를 통해 설치 되어있는 Python 버전들을 모두 보여줍니다. 기본적으로 system이라는 이름으로 되어있으며 이는 시스템에 설치된 Python을 나타냅니다.

pyenv install — listpyenv install 3.6.2

1번째 명령어를 통해 pyenv를 통해 설치 가능한 Python버전을 모두 보여주며 필요한 버전을 2번째 명령어와 같이 설치하시면 됩니다.

단지 pyenv를 통해 Python버전만을 바꾸고 싶다면 pyenv를 통해 Python을 설치한 후 pyenv shell 3.6.2와 같이 설치한 Python버전으로 사용하는 Python의 버전을 바꿀 수 있습니다.

virtualenv

pyenv virtualenv 3.6.2 MyProjectvirtualenv versions

모듈을 격리시키고 싶은 프로젝트의 최상위 폴더에서 1번째 명령어를 입력하면 별명이 ‘MyProject’인 가상 격리공간이 만들어지게 됩니다. 2번째 명령어를 입력함으로써 현재 격리시킨 모든 프로젝트를 보실 수 있습니다.

기본적으로 autoenv를 사용하지 않을 경우 해당하는 프로젝트로 이동한 후에 pyenv activate를 입력함으로써 해당하는 가상 격리 공간 상태로 바뀌도록 할 수 있습니다. 위에서 얘기 드렸듯이 매 프로젝트 폴더마다 pyenv activate를 입력할 경우 많이 귀찮겠죠?

autoenv

virtualenv를 통해서 격리시킨 프로젝트 최상위 폴더내에 .env파일을 생성하고 다음과 같이 입력하고 저장한다.

echo “Python Pyenv > MyProject 진입”pyenv shell MyProjectpyenv activate

위에서 설명했듯이 해당하는 프로젝트 폴더로 들어올 경우 .env의 입력된 스크립트를 실행하도록 되어있기 때문에 자동으로 격리공간으로 진입하여 프로젝트마다 따로 명령어를 치실 필요가 없습게 되었습니다.

마치며

Python 개발 환경을 구축할 때마다 매번 반복하는 구축이라 저 또한 참고하고자 포스트를 쓰게 되었습니다. 이를 통해서 많은 분들이 Python 개발환경을 왜 구축하게 되고, 구축하는데 쉽게 따라하실 수 있으셔서 도움이 많이 돼시면 좋겠습니다. 감사합니다.

--

--

한지승
HASHBOX
Editor for

딥러닝 분야에 모험가 — Machine Learning Engineer @ Clova, Naver Corp. — CV (https://hashbox.github.io)