Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

nomad-programmer

[OS/Rocky] pyenv 설치 본문

OS/Rocky

[OS/Rocky] pyenv 설치

scii 2023. 10. 29. 22:39

pyenv는 os상에서 여러 버전의 파이썬을 안전하게 설치할 수 있도록 도와주는 라이브러리이다. 

https://github.com/pyenv/pyenv

 

GitHub - pyenv/pyenv: Simple Python version management

Simple Python version management. Contribute to pyenv/pyenv development by creating an account on GitHub.

github.com

pyenv-virtualenv로 개별적으로 파이썬 환경을 만들어 앱마다 관리해 나간다. 이를테면 pyenv에서 python3.10을 설치했다고 가정하면 이곳에서 python3.10을 이용해 여러 앱을 만들어가며 패키지를 설치하다보면 패키지 충돌 문제가 야기될 수 있다. 이러한 문제를 해소하기 위해 앱마다 pyenv-virtualenv를 사용한다.


pyenv 설치

OS: Rocky Linux 9

# pyenv에 필요한 패키지 설치
dnf -y install gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel sqlite-devel tk-devel git

모든 사용자가 사용한다는 것을 가정하여 "/usr/local/pyenv"에 설치한다.

pyenv는 홈 디렉토리에도 설치할 수 있으므로 root가 아닌 일반 유저 권한으로 설치를 진행하면, "$HOME/.pyenv" 경로에 설치하면 된다.
# root 유저로 권한 변경 후 아래 명령들 실행
cd /usr/local
git clone https://github.com/pyenv/pyenv.git
cd pyenv
mkdir {versions,shims}

# pyenv plugin 설치
cd plugins
# pyenv-virtualenv는 앱마다 개별 환경을 구축하기 위한 플러그인
git clone https://github.com/pyenv/pyenv-virtualenv.git
# pyenv-update는 pyenv 자체를 업데이트하는 플러그인
git clone https://github.com/pyenv/pyenv-update.git

pyenv 환경 설정

pyenv를 사용할 수 있도록 환경 설정을 해 주어야 한다.

echo 'export PYENV_ROOT="/usr/local/pyenv"' >> /etc/profile.d/pyenv.sh
echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/pyenv.sh

# sudo 명령일 때, 환경 설정을 계승하도록 설정
visudo

# visudo를 실행하고 아래와 같은 라인을 주석처리한다.
# Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin 	<-- 주석처리
# 다음의 2줄을 추가한다.
Defaults      env_keep += "PATH"
Defaults      env_keep += "PYENV_ROOT"

위의 과정을 모두 완료하였다면 다음과 같은 명령으로 pyenv를 확인할 수 있다.

# pyenv path 갱신
source /etc/profile.d/pyenv.sh
# pyenv 버전 확인
pyenv --version

pyenv를 사용하여 python 설치

# 아래의 명령을 실행하면 설치할 수 있는 버전 목록이 나온다.
pyenv install -l

# 사용할 파이썬 버전을 지정하여 다음과 같이 설치한다.
sudo pyenv install -v 3.7.17

 


새 버전을 찾을 수 없는 경우 pyenv 업데이트

python의 새 버전이 나오지 않는다면 pyenv 자체를 업데이트해야 한다. 이때 pyenv-update 플러그인이 필요하다. 이 플러그인을 이용하면 쉽게 업데이트를 할 수 있다.

sudo pyenv update

pyenv를 사용하여 python 버전 전환

pyenv는 시스템 전체, 디렉토리 단위로 버전 지정이 가능하다. 다만, 시스템 전체를 바꾸어 버리면 문제가 발생할 수 있으므로 디렉토리 단위로 설정해 운용해야 안전하다.

디렉토리 단위의 파이썬 버전 지정

$ python --version
Python 3.9.16

$ mkdir ~/sandbox-venv
$ cd ~/sandbox-venv
$ sudo pyenv local 3.7.17

$ python --version
Python 3.7.17    <-- 디렉토리내에서 유효한 버전

디렉토리 단위의 경우 ".python-version" 이라는 설정 파일이 생겨 거기에서 버전이 지정된다. 이 디렉토리 아래에서는 지정된 버전의 python이 동작하고, 디렉토리를 벗어나면 os의 python을 사용하도록 전환된다.

앱 디렉토리에 pyenv로 지정해두면 나머지는 버전을 의식하지 않아도되므로 상당히 편리하다.

OS 시스템 단위의 파이썬 버전 지정

OS 전체에서 버전을 지정하려면 다음과 같이 하면 된다.

$ sudo pyenv global 3.7.17
$ python --version
Python 3.7.17

# 모든 사용자에게 적용
$ su -
# python --version
Python 3.7.17

# 다시 원래의 시스템 파이썬 버전으로 되돌리려면 다음과 같이 명령한다.
# pyenv global system
# python --version
Python 3.9.16

Shell 단위의 파이썬 버전 지정

다음 명령어를 사용하면 현재 shell에서만 해당 버전을 사용할 수 있다.

pyenv shell 3.7.17

pyenv-virutalenv로 파이썬 개별 환경 관리

pyenv를 사용하여 python의 버전 관리를 할 수 있게 되었다. 다만 앱마다 환경을 관리하고 싶은 경우는 "pyenv-virtualenv" 를 사용해야 한다.

같은 버전의 python으로 완전히 다른 앱을 만들고 싶을 때는 pyenv-virtualenv로 환경을 나누면 패키지가 충돌되지 않고 편리하게 사용할 수 있다. 😀

pyenv에서 개별 환경 설정

같은 버전의 python을 사용하는 앱에 대해 두 가지 환경을 설정하는 예이다.

$ pyenv versions
* system (set by /usr/local/pyenv/version)
  3.7.17
  
## virtualenv 만들기
$ sudo pyenv virtualenv 3.7.17 appA-3.7.17
$ sudo pyenv virtualenv 3.7.17 appB-3.7.17

$ pyenv versions
* system (set by /usr/local/pyenv/version)
  3.7.17
  3.7.17/envs/appA-3.7.17
  3.7.17/envs/appB-3.7.17
  appA-3.7.17
  appB-3.7.17
  
## 만든 virtualenv 사용
$ pyenv local appA-3.7.17

## 이와 같이 나누어 사용할 수 있다.
# pip list
Package     Version
----------- --------
pip         22.3
setuptools  65.5.0

패키지를 각각 관리할 수 있으므로, 이것을 설정해두면 앱 환경을 옮길때에도 편리해진다.

만약 해당 앱을 다른 시스템으로 옮긴다면...

pyenv에서 버전 관리하는 디렉토리로 이동하여 설치된 패키지 목록 내보내기

$ pip freeze > requirements.txt

다른 시스템에 앱을 옮겼다는 가정하에, 동일한 python 버전을 설치한 후 버전 관리하는 디렉토리로 이동하여 requirements.txt 패키지 일괄 설치

$ sudo pip install -r requirements.txt

pyenv에서 python 제거

더 이상 필요하지 않은 버전을 지정하여 개별적으로 제거할 수 있다.

sudo pyenv uninstall 3.7.17

pyenv와 anaconda 충돌 주의 😩

파이썬에서 머신러닝을 할 때 anaconda 패키지를 이용하여 가상 환경을 구축해 진행하는 일이 있다. anaconda는 올인원 패키지로 기계 학습 환경을 구축해주고 패키지를 관리해준다. anaconda 관리하에 pip를 사용하면 anaconda가 망가질 수 있으므로 주의해야 한다. 

pyenv를 사용한다면 pip로 패키지를 관리해주고, anaconda라면 conda 명령으로만 관리하는 것이 좋다.

Comments