실습 환경

  • MacBook Air (M1, 2020)
  • macOS Monterey 12.1

전제 조건

  • 리눅스 커맨드에 친숙함.
  • 파이썬에 대해 어느정도 이해하고 있음.
  • macOS에 구축하고 싶음.

macOS에서 파이썬 설치

macOS는 기본적으로 python2가 설치되어 있다.

python3를 설치하기 위해서는 brew 명령어로 설치하면 된다.

우선 HomeBrew에서 python3의 버전이 몇 인지 검색해보자.

1
2
3
4
% brew info python3

python@3.9: stable 3.9.9 (bottled)
...

stable 버전의 파이썬 3.9.x이 설치된다는 것을 알 수 있다.

우선 3.9.x 버전의 파이썬을 설치해보자.

1
2
3
4
% brew install python3
% python3 --version

Python 3.9.9

pyenv - 파이썬 버전 관리 도구

최신 버전의 파이썬은 3.10.1 이다.

물론 brew install python@3.10으로 설치할 수 있지만,

파이썬만을 위한 전문적인 버전 관리 도구를 사용하고자 한다.

pyenv는 Node.js의 nvm이나 n 패키지와 비슷한 프로그램이다.

자, 한번 pyenv를 설치해보자.

1
% brew install pyenv

설치가 완료되었으면 설치 가능한 파이썬 버전을 확인해보자.

그냥 출력하면 너무 많으니, 3.10.x 버전만 나오게 해보자

1
2
3
4
5
6
7
% pyenv install --list | grep 3.10.

3.10.0
3.10-dev
3.10.1
miniconda-3.10.1
miniconda3-3.10.1

이중에서 3.10.1 버전을 설치하자.

1
% pyenv install 3.10.1

정상적으로 설치되었는지 확인해보자.

1
2
3
4
5
6
7
8
9
10
11
# 현재 pyenv로 설치된 파이썬 버전 목록
% pyenv versions

* system (set by /Users/yoojehwan/.pyenv/version)
3.10.1

# 현재 파이썬 버전
% python3 --version

Python 3.9.9

pyenv로 설치가 되었으나 선택이 되어 있지 않은 모습이다.

여기서 알 수 있는 점은 system은 brew로 설치한 버전이라는 것이다.

system을 3.10.1로 변경해보자.

1
2
3
4
5
6
7
8
% pyenv global 3.10.1
% pyenv version

3.10.1 (set by /Users/yoojehwan/.pyenv/version)

% python3 --version

Python 3.9.9

pyenv상에서 설정은 변경되었으나, 여전히 커맨드 python3는 업데이트 되지 않았다.

아직 환경 변수가 설정되지 않았기 때문이다.

.zshrc에 환경 변수를 설정해줘야한다.

1
2
% echo 'eval "$(pyenv init --path)"' >> ~/.zshrc
% echo 'eval "$(pyenv init -)"' >> ~/.zshrc

위 커맨드를 입력하면 스트림을 통해 환경 변수가 .zshrc에 입력된다.

.zshrc를 다시 불러오자.

1
2
3
4
% source ~/.zshrc
% python3 --version

Python 3.10.1

정상적으로 파이썬 버전이 변경되었다.

앞으로는 pyenv global [version] 커맨드로 변경하면 즉시 반영된다.

또한 python에 대한 alias도 되었을 것이다.

1
2
3
% python --version

Python 3.10.1

pyenv-virtualenv - pyenv virtulenv 플러그인

위에서 잠깐 언급된 miniconda처럼 자신만의 가상 환경을 세팅해두고 버전 스위칭을 하고 싶으면 어떻게 해야할까?

pyenv를 위해 제작된 virtualenv 플러그인을 설치하면 된다.

1
% brew install pyenv-virtualenv

역시 환경 변수 설정이 필요하다.

1
2
% echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
% source ~/.zshrc

우선 전역에 numpy라는 패키지를 설치한 적 없으니 해당 커맨드를 입력해보자.

1
2
3
4
5
% python -c 'import numpy'

Traceback (most recent call last):
File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'

numpy를 찾을 수 없다. (당연히 설치를 안했으니…)

그렇다면 numpy가 기본적으로 설치되어 있는 가상환경을 만들어보자.

1
2
3
4
5
6
7
% pyenv virtualenv myvenv # 생성
% pyenv versions # 확인

system
* 3.10.1 (set by /Users/yoojehwan/.pyenv/version)
3.10.1/envs/myvenv
myvenv

그렇다. 플러그인으로 생성한 가상 환경을 하나의 버전으로 취급하는 것이다.

따라서 버전 스위칭 방법을 그대로 해주면 된다.

1
2
3
% pyenv global myvenv
# 또는
% pyenv global 3.10.1/envs/myvenv

이제 넘파이를 설치해보자.

1
2
3
4
% pip install numpy
% pip list | grep numpy

numpy 1.21.5

넘파이가 설치되었다.

그리고 정말 가상 환경에만 설치되었는지 확인하기 위해 3.10.1 버전으로 스위칭한다.

1
2
% pyenv global 3.10.1
% pip list | grep numpy

아무것도 뜨지 않는다면 성공이다.

이제 분리된 가상 환경을 만드는데 성공했다.

이제 감이 좀 오는가?

왜 activate, deactivate를 사용하지 않는지는 여기를 참고하라.
앞으로 삭제될 기능이다!!

autoenv - 가상 환경 자동 스위칭

필요할때마다 pyenv global 혹은 pyenv local을 이용하여

일일이 파이썬 버전을 스위칭하는 일은 매우 귀찮은 일이다.

autoenv를 설치하면 자동적으로 가상환경을 스위칭 할 수 있다.

설치와 함께 환경 변수까지 설정해준다.

1
2
% brew install autoenv # virtualenv 자동 실행
% echo 'source /opt/homebrew/opt/autoenv/activate.sh' >> ~/.zshrc

이제 어떤 프로젝트 하나가 있다고 가정하고 디렉터리를 만든 뒤 .env 파일을 생성하자.
그리고 중요한 것이 .env 파일의 내용은 pyenv local [venv_name]이 되야한다.
이유는 아래의 주석을 잘 읽어보시길!

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

% pyenv global 3.10.1 # 확실하게 기본 버전으로 설정해두고...
% mkdir myproject
% echo 'pyenv local myvenv' > myproject/.env
% cd myproject # 바뀌는지 확인해보자.

autoenv:
autoenv: WARNING:
autoenv: This is the first time you are about to source /Users/yoojehwan/Documents/Python/myproject/.env:
autoenv:
autoenv: --- (begin contents) ---------------------------------------
autoenv: pyenv local myvenv$
autoenv: $
autoenv:
autoenv: --- (end contents) -----------------------------------------
autoenv:
autoenv: Are you sure you want to allow this? (y/N) y

# 처음 실행하면 위와 같은 문구가 뜬다 y를 누르고 엔터!

% ls -al

drwxr-xr-x 4 yoojehwan staff 128 12 30 20:17 .
drwxr-xr-x 6 yoojehwan staff 192 12 30 20:08 ..
-rw-r--r-- 1 yoojehwan staff 20 12 30 20:16 .env
-rw-r--r-- 1 yoojehwan staff 7 12 30 20:17 .python-version

# .python-version이라는 파일이 새로 생성되었다.
# 해당 디렉토리에서만 가상환경을 적용하기 위해서이다. (global이 아닌 local 명령어를 사용한 이유)

% pyenv version

myvenv (set by /Users/yoojehwan/Documents/Python/myproject/.python-version)

# 아주 정상적으로 동작한다.
# 한번 디렉토리를 벗어나보자.

% cd ..
% pyenv version

3.10.1 (set by /Users/yoojehwan/.pyenv/version)

# 다시 전역(global) 설정으로 복귀했다.
# 이렇게 관리하면 전역 오염을 예방할 수 있다!

간단하게 요약 (한방에 설치)

1
2
3
4
5
6
7
8
9
brew install pyenv # pyenv 설치
brew install pyenv-virtualenv # pyenv virtualenv 플러그인
brew install autoenv # virtualenv 자동 실행

# 환경변수 설정
echo 'eval "$(pyenv init --path)"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
echo 'source /opt/homebrew/opt/autoenv/activate.sh' >> ~/.zshrc

즐거운 파이썬 하시길!