Mac에서 Python 설치하기
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 를 하면 인터프리터가 모듈을 찾아서 가져온다. 모듈을 찾는 순서는 다음과 같다.
모듈 검색 순서
- 빌트인 모듈 -
sys,os같은 Python 내장 모듈을 먼저 찾는다 - sys.path - 빌트인에 없으면
sys.path에 등록된 디렉토리들을 순서대로 뒤진다
import sys
print(sys.path)
sys.path 에는 보통 다음이 포함된다.
- 현재 스크립트가 있는 디렉토리
PYTHONPATH환경변수에 설정된 경로- 설치된 패키지 경로 (site-packages)
PYTHONPATH 설정
sys.path 는 PYTHONPATH 환경변수를 기본으로 사용한다. 특정 디렉토리를 모듈 검색 경로에 추가하고 싶으면 ~/.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/ 아래에 있는 것만 삭제하면 된다.