일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Houdini
- c# 추상 클래스
- 다트 언어
- jupyter
- 깃
- 유니티
- docker
- github
- 포인터
- c# winform
- c# 윈폼
- c#
- HTML
- git
- Data Structure
- Unity
- vim
- C언어 포인터
- 구조체
- dart 언어
- jupyter lab
- Algorithm
- C++
- 도커
- C# delegate
- gitlab
- Python
- c언어
- 플러터
- Flutter
- Today
- Total
nomad-programmer
[OS/Rocky] pyenv 설치 본문
pyenv는 os상에서 여러 버전의 파이썬을 안전하게 설치할 수 있도록 도와주는 라이브러리이다.
https://github.com/pyenv/pyenv
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 명령으로만 관리하는 것이 좋다.
'OS > Rocky' 카테고리의 다른 글
[OS/Rocky] 터미널에서 Wake-On-Lan 기능 활용 (1) | 2023.10.16 |
---|---|
[OS/Rocky] OpenVPN with TP-Link 라우터 (0) | 2023.10.16 |
[OS/Rocky] Obsidian 데스트탑 메뉴 설정 (2) | 2023.10.09 |
[OS/Rocky] 나의 vim 환경 설정 (0) | 2023.10.09 |
[OS/Rocky] Rocky Linux9 - Wiki.JS 설치 with PostgreSQL (0) | 2023.09.17 |