목차
맥북 M1을 구매한 지 약 5개월이 지났다. 파이썬 프로그램 활용과 그래픽 툴 사용을 위해 선택한 M1칩이었지만, 기존 사용하던 python과 vscode의 활용이 적용되지 않아 피로가 쌓이던 참에 확실하게 문제 해결을 해보고자 조사와 정리를 했다. 결론부터 얘기하자면 M1칩에서는 일반적인 방법으로 pyqt5가 설치되지 않는다. 이전 자료들을 서치 해보니 home brew를 통해 설치가 가능하다고 했다. 바로 실행에 옮겼지만 이번에 macos 버전이 업데이트 되면서 이 또한 통하지 않았다. 포기를 하려던 참에 눈에 들어온 vscode의 경고 문구에서 pyside6가 있었다. 정확하지 않을 수 있지만, 내가 이해한 내용은 pyqt는 정식이 아니고 pyside가 정식으로 qt를 배포한다는 것이었다. 무심결에 'pip install pyside6'를 실행했다.
위의 글에서 보듯이 약 4달을 넘게 이 문제를 해결하려고 많은 자료를 뒤졌습니다. 대부분의 자료들이 6개월 이전의 자료들이라 해결할 수 있는 실마리를 찾기가 어려웠습니다. 이렇게 확인하다가 몇 가지 좋은 팁들도 발견하여 같이 정리해 보려고 합니다.
0. 2023년 11월 26일 기준 pyqt의 변화
본 포스팅은 brew를 통해 pyqt를 설치하던 시절이었습니다. 최근에는 맥북에서도 pip이용해 바로 pyqt를 설치할 수 있습니다. 또한 pyqt의 backend 사용도 윈도우와 동일하게 가능합니다. 아래 링크에서 해당 주제를 다룹니다.
맥북에서 pip 명령을 이용한다고 해도 본 포스팅에서 다루는 pip 설치는 진행해야 합니다. pip 설치 관련은 링크가 아닌 아래 글에서 확인하시고, pyqt5 설치는 아래 링크를 참고하세요.
1. Mac terminal 에서 pip or python 명령어 사용
Mac은 기본적으로 python 2 버전이 설치되어 있습니다. 요즘 잘 사용하는 버전이 python 3이니 python 홈페이지에서 다운받아 설치하면 됩니다. 다만, 윈도우 OS의 환경 변수와 달리 맥에서의 환경변수 설정이 막 쉽지는 않습니다. 맥을 잘 다루지 못하는 분들께서는 프로그램 설치 경로 확인하는 것도 어렵기 때문입니다. 저의 경우 깔끔하게 2버전을 삭제하고 3버전을 설치하였습니다. 그럼 terminal 창에서 python과 python3을 실행해 보겠습니다.
keyxxxxkim@keyxxxxui-MacBookAir-M1 ~ % python
zsh: command not found: python
keyxxxxkim@keyxxxxui-MacBookAir-M1 ~ % python3
Python 3.8.10 (v3.8.10:3d8993a744, May 3 2021, 09:09:08)
[Clang 12.0.5 (clang-1205.0.22.9)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
python은 명령을 찾을 수 없다고 나오지만 python3는 잘 실행이 되네요. 위의 상태에서 밖으로 나올 때는 quit()를 입력해 주세요. python3로 매번 명령어를 입력해 주는 것도 나쁘지는 않지만 그래도 python으로 단순하게 입력하고 싶어 집니다. 아래와 같이 환경변수에 alias를 추가해 줍니다. 위에서 두 번째 줄을 보면 'zsh' 문구를 확인할 수 있습니다. 환경변수 수정 시 zshrc를 사용합니다. 첫 줄은 환경변수 추가고, 두 번째는 환경변수를 다시 호출하는 겁니다.
echo "alias python=python3" >> ~/.zshrc
. ~/.zshrc
터미널의 내용을 복사하면 경로가 포함되어 복잡할 수가 있어 명령어만 기재하였습니다. 터미널 실행 시 바로 위의 명령을 입력하시면 됩니다. 이후 python을 실행하면 됩니다. 참고로 'python -V'를 실행하면 python 명령이 연결돼 있는 파이썬의 버전을 확인할 수 있습니다.
이제 파이썬 라이브러리 설치 시 자주 사용하는 pip 설치를 해봅니다. 윈도우나 인텔칩에서는 파이썬 설치 시 인식되는 pip도 M1칩에서는 별도로 설치해 주어야 합니다.
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
경로는 제외하고 명령문만 올렸습니다. 첫 번째 줄의 명령문은 pip.py를 다운받는 것입니다. 첫 줄의 명령문만으로 설치가 되지 않습니다. 첫 줄 실행 후 두 번째 줄까지 실행하면 pip 설치가 완료됩니다. 'pip list'를 실행하여 기존에 설치되어 있는 파이썬 라이브러리 확인하실 수 있습니다.
2. M1칩에서 PyQt5 vs. PySide6
vscode를 실행하면 아래쪽 terminal에서도 일반적인 명령을 실행할 수 있습니다. 물론 라이브러리 설치를 위해 pip 명령을 사용할 수 있습니다.(1번 실행 시) 저의 경우 데이터 분석 시 중간중간 그래프 확인을 위해 matplotlib 백엔드를 사용하여 vscode에서 새 창으로 그래프를 확인하고 있습니다. vscode에서 코드 작성 시 초기 import 부분에서 '%matplotlib qt5'를 사용함으로 백엔드 지정을 qt로 하곤 했습니다. qt를 백엔드로 사용하기 위해서는 당연히 pyqt 라이브러리를 설치해야 하는데 M1칩에서 'pip install pyqt5'를 실행하면 metadata-generation-fialed라는 오류 메세지를 떡 하니 띄워줍니다. 예전에는 됐는지 모르겠지만 brew install도 이제는 통하지 않습니다. 그동안 검토한 바로는 pyside6을 설치해야 한다는 결론입니다. vscode 아래쪽에서 'pip install pyside6'를 실행하여 라이브러리를 설치해 줍니다.
3. 백엔드(Backend) 명령어
기본적인 설정은 1, 2를 통해 진행했습니다. 이렇게 설치된 라이브러리를 실제 코드에 넣어 사용할 수 있어야 합니다. vscode는 셀 형식의 입력과 실행을 지원합니다. 주피터 노트북에서 단계 단계 명령어 입력과 실행하는 것과 같은 이치입니다.
위의 이미지를 보면 코드 구문 위아래에 #%%를 넣어서 셀(파란줄)로 설정을 하였습니다. 셀 안쪽에서 'shift + enter' 단축키로 해당 셀만 오른쪽 interpreter에서 실행할 수 있습니다. 윈도우 버전에서는 백엔드 구문이 '%matplotlib qt5'였습니다만, 맥북에 설치된 vscode에서는 'matplotlib.use('qtagg')' 문구를 사용해야 에러 없이 잘 작동됩니다. 참고로 qtagg, qt5agg 는 qt library를 사용하는 것으로 신규 그래프 창이 뜬 이후에 창을 꺼도 인터프리터가 멈추지 않아서 다음 명령을 실행할 수 없습니다. 매번 독(dock)에서 파이썬을 종료해 줘야 하는 번거로움이 생깁니다. tkagg를 사용하면 그래프 창만 꺼도 인터프리터가 멈추게 됩니다.
벡앤드 사용을 하면 그래프가 위와 같이 신규창에서 띄워집니다. 해당 기능은 데이터 분석 시 꼭 필요한 줌을 사용할 수 있다는 장점이 있습니다.
4. 마치며
맥북 M1의 성능은 굳이 제가 설명하지 않아도 다 아실 겁니다. 일반적으로 어떤 기기가 되었든 우리는 그 성능의 50%도 채 사용하지 못하는 것 같습니다. 그래픽과 머신러닝에 최적인 M1을 구매하여 넷플릭스만 보는 것과 같이 말입니다. 저도 이번 포스팅의 내용 확인이 어려워 4달가량을 윈도우 노트북으로 데이터 분석을 하였습니다. 항상 사용하는 기능이 없기 때문이었습니다. vscode에서 qt 백엔드 사용법을 적용하고 나니 다시 맥북으로 업무를 하고 있습니다. 향후에도 우리가 알지 못하는 좋은 팁들을 계속 공유하도록 하겠습니다.
댓글