TIL: Catalina 에서 Python 스크립트 편하게 쓰기

제가 현재 몸담고 있는 회사인 원티드랩에서는 Lokalise 라는 번역 지원 Tool 을 사용하고 있습니다. 이 Tool 은 자체 API를 통해 각 환경에 맞는 Resource 파일을 받을 수 있도록 해 주는데, 저희는 빌드 전에 자동화 스크립트를 사용하여 Resource 파일들을 제 위치에 받아주는 작업을 하고 있습니다.

문제 발생

그런데 최근 macOS Catalina 로 클린 설치를 하고 나서 부터 기존에 사용하던 Python 스크립트가 제대로 작동하지 않는 문제가 발생했습니다. 기존에 Python 에서 사용하던 wget 모듈이 없어져서 그런걸까요?

Python의 wget 모듈은 GNU의 wget 패키지와 아예 다른 모듈로 Python의 urllib 모듈을 이용하여 파일을 다운로드 하는 모듈입니다.

그런데 이 모듈을 설치하려고 pip 를 사용하여 설치를 시도하니 모듈이 설치 되지 않습니다. 파일 쓰기 권한이 없다고 하네요. which python 을 쳐보니 /usr/bin 이 뙇 튀어나오네요. 그리고 생각나는 짤 하나.

XKCD : Python Environment

해결하기

권한이 없으면 권한이 있는 곳에 설치를 해주면 되지 않겠습니까. 우리가 사랑하는 Homebrew를 사용해 봅시다. Homebrew 의 경우 Catalina 관련 문제가 거의 해결된 것으로 보이니 문제는 없겠죠...?

# Install Python Pacaage through Homebrew
$ brew install python

이렇게 하면 Python 최신 버전인 3.x 버전이 설치됩니다. 하지만 아직 시스템에는 Python 2.x 버전이 있기 때문에 명령어를 칠 때마다 "3"을 붙여 줘야 합니다. 귀찮으니 alias 를 등록하여 조금이라도 편하게 써 봅시다. 하는 김에 모듈 관리자인 pip3 도 함께 등록해 줍니다.

# Add alias for python3 & pip3
$ echo "alias python=/usr/local/bin/python3" >> ~/.zshrc
$ echo "alias pip=/usr/local/bin/pip3" >> ~/.zshrc

이제 우리가 필요한 모듈인 Python wget 모듈을 설치해 봅시다. 기본 Python 으로 설치 했을 때는 설치 되지 않던 모듈들이 문제 없이 잘 설치 됩니다. 따로 필요한 모듈이 있다면 추가로 설치해 주세요.

# Install wget module
$ pip install wget
Processing ./Library/Caches/pip/wheels/40/15/30/7d8f7c/wget-3.2-cp37-none-any.whl
Installing collected packages: wget
Successfully installed wget-3.2

잘 설치 됐으니 원하는 스크립트 파일을 실행하면 됩니다. 끗!

# Run lokalise script
$ python ./lokalise.py

결론

정말 제대로 해결하려면 pyenv 와 같은 환경 관리 툴을 써야 하겠지만, Python 개발을 주로 하지 않는 저의 상황에서는 이 정도가 빠르게 해결하기 좋았던 것 같았습니다. 추후에 Python 개발을 하게 된다면 그때쯤 제대로 환경 세팅을 다시 해 볼 생각입니다.

참고자료

opensource.com - The right and wrong way to set Python 3 as default on a Mac

xkcd - Python Environment

PyPi - wget