오늘도 개발
pyenv와 pyenv-virtualenv 본문
1. pyenv와 virtualenv
1) pyenv
파이썬 버전 관리 툴.
한 컴퓨터에서 여러 버전의 파이썬을 사용할 수 있게 해준다.
- 같은 컴퓨터를 여러 명이 공유하는 경우, 유저별로 글로벌에서 다른 버전의 파이썬 사용할 수 있음
- 프로젝트 별로 다른 버전의 파이썬 사용할 수 있음
2) virtualenv
파이썬 가상환경을 만들어주는 툴.
동일한 파이썬 버전이지만 각기 다른 패키지를 사용해야 하는 프로젝트가 여러 개 있을 때 편리하다.
예를 들어 파이썬 3.9를 사용하는 프로젝트가 두 개 있는데,
두 프로젝트에서 사용하는 패키지가 다르다면?
virtualenv로 두 개의 가상환경을 만들어 사용할 수 있다.
3) pyenv-virtualenv
virtualenv를 사용할 수 있게 해주는 pyenv의 플러그인.
.pyenv/versions 디렉터리에 2.8.x, 3.5.x 등의 디렉터리(=런타임, 가상환경)가 생성됨.
pyenv virtualenv 3.9.9 <vertualenv-name>
# 버전 생략하면 시스템 파이썬으로 생성
pyenv virtualenv <vertualenv-name>
2. pyenv 작동 방식
PATH란?
프로그램의 디렉터리를 PATH에 넣어두면,
어느 위치에서든 프로그램을 실행할 수 있다.
입력한 프로그램명을 OS가 PATH에서 찾아 실행하기 때문이다.
PATH에는 이렇게 유저가 미리 넣어둔 디렉토리 리스트가 들어있다.
각 디렉토리는 :로 구분된다.
# echo $PATH
/usr/local/bin:/usr/bin:/bin
ex) 쉘에 python을 (또는 pip)을 입력하는 경우
1. OS가 PATH에서 python이라는 실행파일 검색
2. 왼쪽에서 오른쪽으로 탐색한다.
3. 가장 먼저 매치하는 것(=왼쪽에 있는 것)을 실행한다.
Shims란?
shims는 명령어를 pyenv로 전달해주는 실행파일이다.
Pyenv를 설치하면 pyenv가 PATH 제일 앞쪽에 shims를 삽입한다.
# echo $PATH
$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin
Shims는 가능한 매치 결과를 모두 매치시켜준다.
즉, 여러 버전의 파이썬이 존재한다면 모든 버전의 파이썬이 매치된다.
이후 shims는 매치 결과를 pyenv에게 전달하고,
매치 결과 중 어느 것을 사용할 것인지 pyenv가 결정한다.
Ex) pyenv 설치 후 쉘에 python을 입력하는 경우
1. OS가 PATH에서 python이라는 실행파일 검색
2. python이라는 이름의 shim 발견
3. python이라는 shim 실행 => pyenv로 명령 전달
4. pyenv가 어떤 버전의 python을 사용할 것인지 결정
Pyenv가 어느 버전을 사용할 지 결정하는 기준
1. PYENV_VERSION 환경변수(존재하는 경우) : 어느 위치에서든 pyenv shell 명령어로 설정 가능.
2. 최초로 매치된 .python-version 파일 : pyenv local 명령어로 설정. 현재 디렉터리에 없는 경우 루트까지 타고 올라가며 검색
3. 글로벌에 있는 $(pyenv root)/version 파일 : pyenv global 명령어로 설정.
4. 글로벌에도 없다면 system python(=shim이 없다면 실행됐을 파이썬) 실행
3. pyenv 설치하기
Pyenv 설치
1. pyenv 설치
brew install pyenv
2. PYENV_ROOT 환경변수가 $HOME/.pyenv를 가리키도록 설정(pyenv가 $HOME/.pyenv에 데이터를 저장하게 만듦)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
3. Pyenv 실행파일을 PATH에 추가
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
4. pyenv를 쉘에 추가(pyenv 명령어 입력하면 shims 실행, 자동완성 기능 실행되게 함)
echo 'eval "$(pyenv init -)"' >> ~/.zshrc'웹 프로그래밍 > Python3' 카테고리의 다른 글
| pytest 사용법 2) mock (0) | 2023.01.19 |
|---|---|
| pytest 사용법 1) 설정, fixture, parametrize (0) | 2023.01.18 |
| setdefault와 defaultdict (0) | 2022.12.23 |
| Python의 GC(Garbage Collection) (0) | 2022.10.31 |
| Global Interpreter Lock(GIL) (0) | 2022.10.29 |