본문 바로가기
python

Python 개발 가상환경 설정

by 초특급하품 2019. 10. 20.

시작이 반이라는 말이 과장처럼 느껴지지만 개발환경 설정하는 데에 있어서는 참 공감 가는 말이다. 물론 별다른 설정 없이도 코드 돌리는 건 큰 문제가 되지 않지만 이왕 하는 거 각 문제점을 생각해보면서 개발환경을 구축해보자.

 

Python 버전 관리

python은 크게 2.x, 3.x 로 나뉘는데 문법부터 시작해서 다른 점이 많아 프로젝트 별로 python 버전이 다르면 실행 환경을 바꿔줘야 한다. 매번 python path를 바꾸거나 명령어를 다르게 치는 건 피곤하니 pyenv 를 사용한다. 비슷한 기능으로 virtualenv, pyvenv 가 있지만 내장 기능으로 사용할 수 있는 pyenv를 사용했다.

 

pyenv는 기존 설치된 python과 별도로 관리되기 때문에 사용하고자 하는 버전을 추가로 설치해야 한다.

$ pyenv install 3.7.4
$ pyenv versions

 

사용하려는 python을 설치 후 해당 프로젝트 폴더 안에서 실행시킨다.

$ pyenv local 3.7.4

 

이처럼 3.7.4 버전을 이 프로젝트 안에서 사용하겠다고 설정하면 .python-version 파일이 생성되고 열어보면 이 버전이 쓰여있다. 아직은 파일만 생성될 뿐 파이썬이 해당 버전으로 실행되지는 않는다. 이 버전으로 python을 실행시키기 위해서 pyenv를 실행시키는 코드를 ~/.bash_profile에 추가해야 한다.

eval "$(pyenv init -)"

 

적용 후에 다른 폴더에서 python 버전을 확인해 보면 달라진 게 없고, 현재 폴더 안에서 python -V로 버전을 확인해 보면 Python 3.7.4를 확인할 수 있다.

 

Package 관리

파이썬에서는 pip를 통해 패키지 관리를 한다. pip install PACKAGE_NAME으로 원하는 패키지를 받을 수 있다. 현재 설치된 패키지는 pip freeze명령으로 추출할 수 있고, pip [install | uninstall] -r requirements.txt로 해당 패키지들을 모두 설치하거나 삭제할 수 있다.

 

하지만 여기에도 문제가 있다.

프로젝트별로 pyenv가 파이썬 버전 관리는 해주지만 여전히 같은 버전일 경우 package는 같은 site-pacages 폴더 안에 생성된다. 참조하는 패키지의 버전도 관리해야 하기 때문에 이것도 프로젝트 단위로 가상 환경을 만들어야 한다.

 

파이썬 3.3부터 지원되는 venv로 분리할 수 있다.

# pyenv version 전역 폴더의 site-packages
$ python -c "import site; print(site.getsitepackages())"

$ python -m venv ENV_DIR
$ cd ENV_DIR
$ source ./bin/activate

# 현재 프로젝트의 새로운 site-packages 
$ python -c "import site; print(site.getsitepackages())"

 

가상환경을 생성하고 참조하고 있는 site-packages를 출력해보면 현재 프로젝트 내부에 있다는 것을 확인할 수 있다. 이렇게 분리시키면서 다른 프로젝트와 패키지 의존성을 없앨 수 있다.

 

크게 파이썬 버전과 패키지 가상 환경 두 가지를 구성했는데 pyenv-virtualenv로 한 번에 할 수도 있다.

'python' 카테고리의 다른 글

django 커스텀 유저 모델  (0) 2022.02.01
django rest framework의 serializer, view 추상화 과정  (0) 2020.06.25
django model 정리  (0) 2020.06.13
cookiecutter로 django 프로젝트 생성  (0) 2020.06.11

댓글