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