Skip to content

Commit

Permalink
Add a new post on pyenv and virtualenv
Browse files Browse the repository at this point in the history
  • Loading branch information
dandyrilla committed Jun 5, 2024
1 parent 5afbf34 commit 9df7a37
Showing 1 changed file with 230 additions and 0 deletions.
230 changes: 230 additions & 0 deletions _posts/2024-06-05-pyenv-virtualenv.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,230 @@
---
layout: post
title: "pyenv, virtualenv 설치 및 사용법"
description: 파이썬을 쉽게 설치할 수 있도록 도와주는 pyenv 와 가상환경을 분리하여 관리할 수 있는 virtualenv 사용법에 대해 알아본다.
tags: [pyenv, virtualenv]
comments: true
share: true
---

파이썬을 쉽게 설치할 수 있도록 도와주는 pyenv 와 가상환경을 분리하여 관리할 수 있는 virtualenv 사용법에 대해 알아본다.

## pyenv 및 python 설치 후 virtualenv 가상환경 생성하기

### Step 1: pyenv 설치

다음의 명령어를 이용하여 pyenv 를 설치한다.

```bash
curl https://pyenv.run | bash
```


### Step 2: Shell 환경에 pyenv 설정 반영

다음의 내용을 .bashrc 스크립트에 추가하여 pyenv 가 shell 시작 시 자동으로 로드되도록 만든다.

```
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
```

서버에 다시 접속하여 다음과 같이 pyenv 가 제대로 동작하는지 확인한다. 여기에서는 버전을 한번 출력해 보았다.

```bash
pyenv --version
```

```
pyenv 2.4.1
```


### Step 3: 필요한 버전의 python 설치

아래와 같이 pyenv 를 통하여 python 3.11.8 버전을 설치한다.

```bash
pyenv install 3.11.8
```

성공한 경우 아래의 메시지를 볼 수 있다.

```
Downloading Python-3.11.8.tar.xz...
-> https://www.python.org/ftp/python/3.11.8/Python-3.11.8.tar.xz
Installing Python-3.11.8...
Installed Python-3.11.8 to /home/ubuntu/.pyenv/versions/3.11.8
```

다음과 같은 명령을 이용하면 현재 pyenv 로부터 설치되어 있는 버전들을 확인해볼 수 있다. system 외에 3.11.8 버전이 추가된 것을 볼 수 있다.

```bash
pyenv versions
```

```
* system (set by /home/ubuntu/.pyenv/version)
3.11.8
```

(참고) 만약 python 설치에 에러가 있었다면 시스템에서 필요한 라이브러리가 제대로 설치되어 있지 않기 때문일 수 있다.
아래의 명령어를 통해 필요 라이브러리들을 설치 후 다시 한번 시도를 해보는 것을 권장한다.

```
sudo apt-get install -y \
make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \
libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils \
tk-dev libffi-dev liblzma-dev python-openssl git
```


### Step 4: 가상 환경 생성 및 확인

앞서 설치한 python 3.11.8 버전 기반으로 py311 라는 이름의 가상환경을 생성한다.

```bash
pyenv virtualenv 3.11.8 py311
```

추가된 가상환경은 아래와 같이 확인할 수 있다.

```bash
pyenv virtualenvs
```

```
3.11.8/envs/py311 (created from /home/ubuntu/.pyenv/versions/3.11.8)
py311 (created from /home/ubuntu/.pyenv/versions/3.11.8)
```

(참고) 만약 python 을 설치하지 않고 가상환경을 만든다면 다음과 같은 에러가 발생한다.
예를 들어 앞서 미리 설치되지 않은 3.11.5 라는 버전에 대해 가상환경을 생성하려는 시도를 해 보았다.

```bash
pyenv virtualenv 3.11.5 py311
```

그러면 다음과 같이 pyenv 에 설치되어 있지 않은 파이썬 버전이므로 파이썬 설치부터 먼저 진행하라는 안내 문구가 나온다.

```
pyenv-virtualenv: `3.11.5' is not installed in pyenv.
Run `pyenv install 3.11.5' to install it.
```


### Step 4: 가상환경 적용 (activate)

다음의 명령어를 통하여 가상환경을 적용시킬 수 있다.

```bash
pyenv activate py311
```

가상 환경이 적용되면 명령줄 프롬프트의 맨 앞에 `(py311)` 이 추가된다.

```
(py311) ubuntu@ip-10-144-193-3:~$
```

다음과 같이 파이썬 버전이 가상환경에서 사용되는 3.11.8 버전으로 변경된 것을 확인할 수 있다.

```bash
python3 --version
```

```
Python 3.11.8
```


### Step 5: 적용된 가상환경 해제 (deactivate)

다음의 명령어를 통하여 적용된 가상환경을 해제시킬 수 있다.

```bash
pyenv deactivate
```

가상 환경이 해제되면 명령줄 프롬프트에 있던 `(py311)` 표시가 사라진다.

```
ubuntu@ip-10-144-193-3:~$
```

다음과 같이 파이썬 버전이 3.8.10 으로 되돌아 온 것을 확인해 볼 수 있다.

```bash
python3 --version
```

```
Python 3.8.10
```


### Step 5: 해당 폴더에 가상환경 적용

일단 현재 상태의 python 버전을 확인해 보면, 3.8.10 버전으로 잡혀있는 것을 볼 수 있다.

```bash
python3 --version
```

```
Python 3.8.10
```

가상환경이 적용될 폴더를 위해 임시로 `project` 라는 이름의 폴더를 만들고 해당 폴더로 들어가 가상환경을 적용해 보았다.

```bash
cd project
pyenv local py311
```

해당 폴더 내에 `.python-version` 이라는 파일이 생성되며,
명령줄 프롬프트 앞에 `(py311)` 도 붙어있는 것을 확인할 수 있다.

```bash
cat .python-version
```

```
py311
```

또한 이 폴더 내에서 파이썬 버전을 살펴보면 기존 system 버전인 3.8.10 이 아닌 3.11.8 버전으로 잡혀있는 것을 볼 수 있다.

```bash
python3 --version
```

```
Python 3.11.8
```


## pyenv 삭제하기

pyenv 삭제는 별도의 과정이 필요 없이 해당 폴더나 파일들만 제대로 지워주면 된다.

### Step 1. pyenv 폴더 삭제

사용자의 홈 디렉토리에서 `.pyenv` 폴더를 삭제한다.

```bash
cd ~
rm -rf .pyenv
```

### Step 2. pyenv 관련하여 추가된 설정 제거

pyenv 를 설치하면서 추가한 `.bashprofile` 혹은 `.bashrc` 파일 내 라인들을 제거한다.


### Step 3. (선택 사항) 각 프로젝트 폴더 내 `.python-version` 파일 삭제하기

각 프로젝트 폴더 내 `.python-version` 파일들을 삭제한다.
나중에 pyenv 를 다시 설치하면서 동일한 가상환경 이름을 사용한다면 굳이 삭제하지 않아도 되겠지만 깔끔하게 하기 위해 삭제할 것을 권장한다.

0 comments on commit 9df7a37

Please sign in to comment.