지극히 개인적인 프로그래밍 언어에 대한 철학(?)으로 인해 그동안 파이썬을 기피해 왔습니다.ㅎㅎ 그 철학(?)이라고 할 것도 그렇게 거창한 것들은 없지만, 무엇보다도 Indent로 Code block을 구분한다는 사실에 충격(+문화컬쳐)을 먹고 지금까지 쳐다보지도 않았습니다.
헌데 근래에 연구 프로젝트 관련하여 반 강제적으로 써야 할 일이 생겨서 책펴놓고 급하게 공부하는 중입니다. (하아..ㅠㅠ) C/C++과 달리 물렁물렁한 문법들 때문에 많은 곶통을 받고 있지만, 그래도 해야겠..죠??
Python 책을 보는데, 저자가 심심치 않게 2.x 버전과 3.x 버전을 구분하고 있습니다. 여기서부터 뭔가 심상치 않은 낌새를 느끼긴 했는데.. 2.x버전과 3.x 버전이 그렇게 다르다면서요-??ㅡㅡ^
새로 공부하는 입장에서 최신 버전에 맞춰서 공부하고싶긴 하지만, 프로젝트에 사용하는 프로그램은 Python 2.x버전을 사용하고 있습니다. 찾아보니 3.x 버전의 하위호환성은 보장되지 않는다고 하니, 두 가지 Python 버전을 필요에 따라 스위칭하며 사용할 필요가 있었습니다.
예전에 Node.js 프로그래밍을 할 때는 NVM(Node Version Manager)이라는 유틸리티를 사용해서 여러 버전의 Node를 바꿔 가며 사용했던 적이 있습니다. 아무래도 Node.js가 등장한 초창기이고, 버전업을 할 때마다 갈아엎는 API가 많아서 이런 유틸리티가 등장했던 것 같습니다. (Ruby도 RVM이라는 버전관리 유틸리티가 있습니다.)
Python도 2.x 버전과 3.x 버전이 심심치 않게 다르다고 하니, 이런 종류의 버전 스위칭 유틸이 분명 있을 것이다라고 생각하며 구글링을 했습니다. 역시나 이미 누군가가 벌써 만들어서 배포중이었습니다.ㅎㅎ
https://github.com/yyuu/pyenv
pyenv 설치하고 설정하기
의존성 패키지 설치하기
Ubuntu환경에서 개발을 주로 하는 경우 의존성 패키지가 대부분 이미 설치되어 있겠지만, 만약을 위해 다시 한 번 확인해 주도록 합니다.
의존성 패키지가 설치되어 있지 않으면, pyenv를 설치하는 시점에는 아무 문제가 없더라도 추후에 사용할 때 귀찮은 오류들이 발생할 수 있습니다.
$ sudo apt-get install make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev llvm
참고로, CentOS에서는 다음 패키지들을 설치합니다.
yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite \ sqlite-devel mysql-devel
pyenv 설치하기
pyenv는 자동으로 설치하고 설정해 주는 Installer를 별도로 제공하고 있으므로 Shell에서 다음 한 줄 명령으로 간단하게 설치할 수 있습니다.
$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
Path에 등록하기
설치 과정에서 PATH는 자동으로 추가해 주지 않으므로 다음 내용을 ~/.bashrc파일 끝부분에 추가해줘야 합니다.
export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
이제 Shell을 다시 실행하고 아무런 오류 메시지가 출력되지 않으면 pyenv를 사용할 준비가 끝난 것입니다.
pyenv 사용 방법
설치된 Python 버전 목록 확인하기
$ pyenv versions
현재 사용중인 버전 앞에는 '*'이 붙어서 나타납니다. pyenv를 처음 설치했다면 'system' 항목만 나타날 것이며, 이는 현 시스템에 전역적으로 설치된 버전의 Python을 나타냅니다.
새로운 버전의 Python 설치하기
$ pyenv install x.y.z
x.y.z에는 설치할 Python의 버전을 명시해 줍니다. 친절하게도(!) 자동완성 기능도 구현되어 있습니다.
참고로, pyenv로 새로운 버전의 Python을 설치하는 것은 현재 사용자에게만 영향을 미칩니다. 실제로 설치되는 위치도 /usr/bin 등의 시스템 디렉토리가 아닌, 현 사용자의 홈 디렉토리 내의 .pyenv 디렉토리 안에 설치됩니다.
따라서, pyenv 명령은 sudo와 함께 사용할 필요가 없습니다.
사용할 Python 버전 변경하기
$ pyenv global x.y.z
역시 x.y.z에는 사용할 Python의 버전을 명시해 줍니다. 단, pyenv install을 통해 설치한 버전이어야만 합니다. 시스템에 설치된 Python으로 전환하려면 x.y.z 대신 system을 입력하면 됩니다.
이렇게 하면 현재 로그인한 사용자의 Shell에서 사용하는 Python의 버전이 그에 맞게 바뀝니다. 정상적으로 버전이 바뀌었다면, 아무런 메시지도 출력되지 않습니다.
'뭐, 버전을 바꿨는데 아무 메시지도 안뜨는데 바뀐거 맞아??'라는 의심이 든다면, 다음 명령으로 활성화된 Python의 버전을 확인해 보세요.
$ python --version
(+) 다음과 같이 global 대신 local을 사용하면 현재 디렉토리에서 사용할 Python 버전을 따로 지정할 수 있습니다.
$ pyenv local x.y.z
이 명령은 프로젝트별로 사용하는 Python 버전이 다를 경우 요긴하게 사용할 수 있을 것입니다.
- [Django Tutorial] 9. Production - uWSGI를 통해 Nginx 웹 서버와 연동하기 (11158) *1
- [Django Tutorial] 8. Production - setting.py설정, Static파일 모으기 (5315)
- [Django Tutorial] 7. 백엔드 콘솔에 Custom Command 추가하기 (3996)
- [Django Tutorial] 6. Database 연동하기 - Model설계, Migration (29900)
- [Django Tutorial] 5. Static 파일 사용하고 관리하기 (9079)
- [Django Tutorial] 4. URL Config, Template 및 View의 동작에 대한 이해 (8998)
- [Django Tutorial] 3. 프로젝트 및 App 생성, settings.py수정(DB연동, Migration), Runserver (12111)
- [Django Tutorial] 2. 개발 환경 세팅하기 - pyenv 및 virtualenv 활용 (6428)
- [Django Tutorial] 1. 파이썬 기반 웹 프레임워크 Django에 대한 소개 (10783) *2
- VirtualEnv를 통한 Python Sandbox 개발환경 구축하기 (4216)