라떼는 ... Python 버전이 2.x 인지 아니면 3.x 인지만 따지면 됐었는데,

요즘은 ... 3.6 이어도 충분한지 3.7 또는 3.8 호환인지도 따져야 하는 (더러운까지는 아니고) 아주 머리아픈 세상이다.

 

그래서 지금까지는 Ubuntu 환경으로 구축해놓은 개발PC 에서

기존에 JDK에서 사용하던 방식처럼 Python도 alternative 방식으로 원하는 버전을 선택해서 사용했었다.

 

  - https://www.whatwant.com/entry/update-alternatives-여러-버전의-패키지-관리하기

 

 

가볍게 사용하기에는 alternative 방식도 나름 괜찮은 방법이다.

하지만, Python에서는 JDK에서는 만나지 못했던 문제 상황이 발생한다.

작성한 프로그램에서 필요로 하는 패키지들이 있고, 서로간의 dependency까지 신경을 써줘야 한다.

 

패키지 관리에 대한 것은 다음 기회에 살펴보기로 하고,

지금은 일단 여러 버전의 Python을 편하게 사용할 수 있는 방법에 대해서 알아보도록 하겠다.

 

 

[ pyenv ]

  - https://github.com/pyenv/pyenv

 

pyenv

 

왜 이제서야 이 아이를 알게 되었을까!?

진작 알았더라면 훨씬 편하게 살 수 있었을 텐데...

 

이하 과정은 `Ubuntu 18.04` 운영체제에서 `zsh` 쉘환경을 기준으로 진행했다.

일부 차이가 나는 부분에 대해서는 pyenv 사이트에 나오는 가이드를 참고하면 된다.

 

 

1. Environment

 

Ubuntu 패키지로 제공되는 Python2, Python3 모두 설치되어 있으며,

버전 관리를 위해 update-alternatives 설정이 되어 있다.

❯ python --version
Python 3.6.9

❯ sudo update-alternatives --list python

/usr/bin/python2
/usr/bin/python3

❯ sudo update-alternatives --list pip   
/usr/bin/pip3

 

 

2. Prerequisites

 

① remove alternative

alternative가 설정된 상태에서 pyenv는 정상 동작하지 않기에 설정을 지워야 한다.

❯ sudo update-alternatives --remove python /usr/bin/python

❯ sudo update-alternatives --remove pip /usr/bin/pip

 

② install the Python build dependencies

Python build를 위해 필요한 의존성 패키지들을 설치해주자. 좀 많이 설치된다.

❯ sudo apt install make build-essential libssl-dev zlib1g-dev \ 
                        libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
                        libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

 

 

3. Basic GitHub Checkout

 

여러 설치 방법 중에서 가장 깔끔하고 무난한 방법이라서 선택했다.

 

① git clone

❯ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

 

② build

꼭 해야하는 과정은 아니지만, 성능 향상을 위해서 추천한다.

❯ cd ~/.pyenv && src/configure && make -C src
make: 디렉터리 '/home/chani/.pyenv/src' 들어감
gcc -fPIC     -c -o realpath.o realpath.c
gcc -shared -Wl,-soname,../libexec/pyenv-realpath.dylib  -o ../libexec/pyenv-realpath.dylib realpath.o 
make: 디렉터리 '/home/chani/.pyenv/src' 나감

 

③ Configure your shell's environment for Pyenv

여기에서는 zsh 환경에 대해서만 진행한다. 다른 쉘을 사용한다면 GitHub 사이트 방문해서 참고하면 되겠다.

아! MacOS의 zsh 환경에서는 .profile 부문만 빼고 진행하면 된다.

> echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zprofile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zprofile
echo 'eval "$(pyenv init --path)"' >> ~/.zprofile

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init --path)"' >> ~/.profile

echo 'eval "$(pyenv init -)"' >> ~/.zshrc

 

④ 재로그인 / 재부팅

로그아웃 후에 다시 로그인 하거나, 재부팅을 해야 이하 과정이 제대로 진행된다.

 

⑤ 확인

제대로 설치되었는지 확인해보자. 아래 결과가 나오지 않으면 위의 과정을 다시 한 번 점검해보기 바란다.

❯ pyenv versions
* system (set by /home/chani/.pyenv/version)

 

 

4. Python Install

 

이제 새로운 버전의 Python을 설치해보자.

현재 다운로드 받을 수 있는 버전들을 확인하고 싶으면 아래 사이트를 참고하기 바란다.

  - https://www.python.org/downloads/

 

① Python Install

❯ pyenv install 3.8.12
Downloading Python-3.8.12.tar.xz...
-> https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tar.xz
Installing Python-3.8.12...
Installed Python-3.8.12 to /home/chani/.pyenv/versions/3.8.12

 

② 확인

방금 설치한 3.8.12 버전을 볼 수 있다. (하지만 현재 설정된 것은 system에 설치된 버전이다)

❯ pyenv versions
* system (set by /home/chani/.pyenv/version)
  3.8.12

 

③ 추가

3.9 버전도 추가로 설치해보자.

❯ pyenv install 3.9.10
Downloading Python-3.9.10.tar.xz...
-> https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tar.xz
Installing Python-3.9.10...
Installed Python-3.9.10 to /home/chani/.pyenv/versions/3.9.10

❯ pyenv versions
* system (set by /home/chani/.pyenv/version)
  3.8.12
  3.9.10

 

 

5. command

 

전체 명령어에 대한 가이드는 아래 링크를 참조하기 바란다.

  - https://github.com/pyenv/pyenv/blob/master/COMMANDS.md

 

주로 사용할 것은 local / global / shell 이지 않을까 싶다.

❯ cd /srv/workspace/pyenv-test

❯ pyenv versions
  system
* 3.8.12 (set by /home/chani/.pyenv/version)
  3.9.10

❯ ls -al
합계 8
drwxrwxr-x 2 chani chani 4096  3월 14 23:01 .
drwxr-xr-x 4 chani chani 4096  3월 14 23:00 ..

❯ pyenv local 3.9.10

❯ ls -al
합계 12
drwxrwxr-x 2 chani chani 4096  3월 14 23:03 .
drwxr-xr-x 4 chani chani 4096  3월 14 23:00 ..
-rw-rw-r-- 1 chani chani    7  3월 14 23:03 .python-version

❯ pyenv versions
  system
  3.8.12
* 3.9.10 (set by /srv/workspace/pyenv-test/.python-version)

❯ pyenv local --unset

❯ ls -al
합계 8
drwxrwxr-x 2 chani chani 4096  3월 14 23:04 .
drwxr-xr-x 4 chani chani 4096  3월 14 23:00 ..

❯ python --version
Python 3.8.12

❯ pyenv versions
  system
* 3.8.12 (set by /home/chani/.pyenv/version)
  3.9.10

 

이제 Python 버전의 괴로움에서 벗어나자~~~!!!

 

반응형

+ Recent posts