Mac에서 Python 설치하기

English (N/A)

macOS에서 Python 환경을 세팅하다 보면 PATH가 꼬이거나 버전이 충돌하는 경우가 많다. 깔끔하게 정리해보자.

macOS의 Python 현황

과거 (Monterey 12.3 이전)

예전 macOS에는 시스템용 Python 2가 /usr/bin/python 에 설치되어 있었다. 운영체제에서 사용하기 때문에 이걸 지우면 안 됐다.

현재 (Monterey 12.3 이후)

macOS Monterey 12.3부터 Python 2가 제거되었다. Python 2는 2020년 1월 1일부로 지원이 종료되었기 때문이다.

최신 macOS에서 터미널에 python3 를 입력하면 Xcode Command Line Tools 설치 안내가 뜬다. 설치하면 /usr/bin/python3 에 Python 3이 설치되지만, 보통 오래된 버전이다.

Python 3 설치

방법 1: 공식 사이트에서 설치

python.org에서 최신 버전을 다운로드해서 설치한다.

설치하면 /Library/Frameworks/Python.framework/ 에 설치되고, /usr/local/bin/python3 심볼릭 링크가 생성된다.

방법 2: Homebrew로 설치

brew install python

Homebrew로 설치하면 버전 관리가 편하다.

PATH 문제 해결

Python을 여러 번 설치하다 보면 PATH가 꼬여서 python 이나 pip 가 엉뚱한 버전을 가리키는 경우가 있다.

현재 경로 확인

which python3
which pip3

# 심볼릭 링크가 어디로 연결되어 있는지 확인
ls -la /usr/local/bin/python3
ls -la /usr/local/bin/pip3

alias 설정

~/.zshrc 에 다음을 추가해서 명확하게 지정할 수 있다.

alias python=/usr/local/bin/python3
alias pip=/usr/local/bin/pip3

가상환경 사용하기

Python을 설치했다고 끝이 아니다. pip 으로 라이브러리를 설치하면 시스템 전역에 설치되기 때문에 여러 프로젝트를 진행할 때 디펜던시가 꼬이게 된다. A 프로젝트는 requests 2.25가 필요하고 B 프로젝트는 requests 2.31이 필요하면 문제가 생긴다.

venv 를 사용하면 프로젝트마다 별도의 Python 환경을 만들 수 있다.

가상환경 생성 및 활성화

# 프로젝트 디렉토리에서 가상환경 생성
python3 -m venv venv

# 가상환경 활성화
source venv/bin/activate

# 프롬프트 앞에 (venv)가 붙으면 활성화된 것

패키지 관리

# 가상환경 안에서 패키지 설치
pip install requests

# 다른 환경에서 같은 패키지 설치
pip install -r requirements.txt

requirements.txt 생성

pip freeze 사용

pip freeze > requirements.txt

현재 환경에 설치된 모든 패키지를 출력한다. 문제는 프로젝트에서 사용하지 않는 패키지까지 포함된다는 것이다.

pipreqs 사용 (권장)

pip install pipreqs
pipreqs ./

pipreqs 는 프로젝트 코드를 분석해서 실제로 import하는 패키지만 추출한다. 불필요한 패키지가 포함되지 않아서 깔끔하다.

가상환경 비활성화

deactivate

.gitignore 설정

venv 디렉토리는 용량이 크고 환경마다 다르게 생성되므로 git에 올리지 않는다. .gitignore 에 추가한다.

venv/

모듈 시스템 이해하기

Python에서 import 를 하면 인터프리터가 모듈을 찾아서 가져온다. 모듈을 찾는 순서는 다음과 같다.

모듈 검색 순서

  1. 빌트인 모듈 - sys, os 같은 Python 내장 모듈을 먼저 찾는다
  2. sys.path - 빌트인에 없으면 sys.path 에 등록된 디렉토리들을 순서대로 뒤진다
import sys
print(sys.path)

sys.path 에는 보통 다음이 포함된다.

  • 현재 스크립트가 있는 디렉토리
  • PYTHONPATH 환경변수에 설정된 경로
  • 설치된 패키지 경로 (site-packages)

PYTHONPATH 설정

sys.pathPYTHONPATH 환경변수를 기본으로 사용한다. 특정 디렉토리를 모듈 검색 경로에 추가하고 싶으면 ~/.zshrc 에 설정한다.

export PYTHONPATH="/path/to/my/modules:$PYTHONPATH"

코드에서 직접 추가할 수도 있다.

import sys
sys.path.insert(0, '/path/to/my/modules')

.pyc 캐시

Python 인터프리터는 모듈을 빠르게 가져오기 위해 컴파일된 바이트코드를 __pycache__ 디렉토리에 .pyc 파일로 캐시해둔다. 소스 파일이 변경되면 자동으로 다시 컴파일된다.

.gitignore 에 추가해두자.

__pycache__/
*.pyc

이전 Python 삭제 (필요한 경우)

python.org에서 설치한 Python을 삭제하려면 다음과 같이 한다. 버전 번호는 설치된 버전에 맞게 수정한다.

# Python 프레임워크 삭제
sudo rm -rf /Library/Frameworks/Python.framework/Versions/3.x

# Applications 폴더에서 삭제
sudo rm -rf "/Applications/Python 3.x"

# 심볼릭 링크 삭제
cd /usr/local/bin/
ls -l | grep '../Library/Frameworks/Python.framework/Versions/3.x' | awk '{print $9}' | tr -d @ | xargs rm

~/.zshrc~/.bash_profile 에 Python 관련 PATH가 추가되어 있다면 그것도 삭제한다.

주의사항

/usr/bin/python3 은 시스템용이므로 건드리지 않는다. /Library/Frameworks/ 아래에 있는 것만 삭제하면 된다.

참고