오늘도 개발

pyenv와 pyenv-virtualenv 본문

웹 프로그래밍/Python3

pyenv와 pyenv-virtualenv

Sueeeeeee 2023. 1. 3. 19:11

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