[Python] M1 맥북에서 Python 설치하기

Apple M1 ARM 아키텍쳐에서 파이썬 3.9.1 미만의 버전을 설치하는 방법을 공유합니다.

짧은 설명

긴 설명

Apple은 성능개선을 위하여 CPU 설계를 변경하였습니다. 그동안 사용하던 Intel Chipset(이하 x86)에서 Apple Silicon(이하 ARM)으로 변경하였습니다. 아키텍쳐가 변경되었기 때문에 Intel 기준으로 만들어진 모든 프로그램들이 동작하지 않습니다. 이를 위해 Apple에서는 Rosetta2 번역기를 제공하여 불편함을 없앴습니다. 자동으로 x86 머신코드를 ARM64 머신코드로 변환하고 실행시켜 줍니다.

최신 파이썬버전은 ARM 환경이 지원되지만, 과거버전은 ARM 환경에서 빌드를 지원하지 않기 때문에 인텔환경에서 빌드를 하는 과정을 해줘야합니다.

3.9.1 is the first version of Python to support macOS 11 Big Sur. With Xcode 11 and later it is now possible to build “Universal 2” binaries which work on Apple Silicon.

설치방법

Intel 칩셋용 Homebrew를 설치후 Intel용 Pyenv를 설치하고 Python을 설치하도록 하겠습니다.

설치순서는 Rosetta2 설치 → Homebrew for ARM설치 → Homebrew for X86 설치 → Pyenv 설치 → Pyenv로 Python 설치

1) Roestta2 설치

/usr/sbin/softwareupdate --install-rosetta너무 느리면 아래 명령어로 설치하세요
/usr/sbin/softwareupdate --install-rosetta agree-to-license

2) Homebrew for ARM설치

ARM용 Homebrew를 설치합니다. /opt/homebrew에 ARM용 Homebrew가 설치됩니다. (이하 Mac brew)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

3) Homebrew for X86 설치

Intel용 Homebrew를 설치합니다. /usr/local/Homebrew에 Intel용 Homebrew가 설치됩니다. arch -x86_64 명령어로 머신 환경을 X86으로 변경하여 brew를 설치할 수 있게 해줍니다. (이하 Intel brew)

arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"# 안될경우 아래코드를 실행
arch -x86_64 zsh
cd /usr/local && mkdir homebrew
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
Homebrew 설치 스크립트, 환경에 따라 설치 경로가 다르다.

경로를 지정하여 brew별 package를 설치할 수 있습니다.

# Intel brew로 패키지를 설치해서 Rosetta2로 에뮬레이팅하려면 아래 명령어를 사용
arch -x86_64 /usr/local/homebrew/bin/brew install <package name>
# Mac brew로 패키지를 설치하려면 아래 명령어를 사용
/opt/homebrew/bin/brew install <package name>

4) Alias와 Path를 추가

사용 편의성을 높이기 위해 alias와 path를 설정해줍니다. 이제 ibrew 명령어로 인텔 환경에서 패키지를 받고 빌드할 수 있으며, mbrew로 애플 네이티브 패키지를 받고 설치할 수 있습니다.

# Alias
echo "ibrew='arch -x86_64 /usr/local/bin/brew'" >> ~/.zshrc
echo "mbrew='arch -arm64e /opt/homebrew/bin/brew'" >> ~/.zshrc
# Path 이렇게 설정하면 네이티브 패키지를 우선 찾고 없을 경우 인텔기반 버전을 찾습니다.
echo "export PATH=\"/usr/local/bin:$PATH\"" >> ~/.zshrc
echo "export PATH=\"/opt/homebrew/bin:$PATH\" >> ~/.zshrc

5) Pyenv 설치

Pyenv는 다양한 버전의 파이썬을 쉽게 설치하고 버전을 변경할 수 있도록 도와줍니다. Intel brew를 통해 pyenv를 설치해줍니다.

# 아래 명령어를 실행하면 Intel brew의 환경변수를 커널에 export 해줍니다.
eval "$(ibrew shellenv)"
# Intel brew로 Pyenv를 설치합니다.
ibrew install pyenv

Python 3.X 설치

3.9.1 버전 미만의 파이썬은 arm64 칩셋을 지원하지 않습니다. 따라서 빌드 환경을 Intel chipset으로 변경하고 Pyenv의 python을 설치해줍니다.
(여기서는 3.6.8 버전을 지정하였으며, Mac Os 11(Big sur)에서 빌드를 지원하는 패치코드를 추가하여 설치합니다.)

arch -x86_64 pyenv install --patch 3.6.8 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)

부가 설명

Arch

arch는 머신의 아키텍쳐를 출력하거나, 프로그램 빌드시 머신 아키텍쳐를 변경해주는 명령어입니다.

#아키텍쳐명 / 설명
i386 32-bit intel
x86_64 64-bit intel
x86_64h 64-bit intel (haswell)
arm64 64-bit arm
arm64e 64-bit arm (Apple Silicon)

아래는 Python 빌드 Makefile을 만들어주는 configure스크립트입니다. 왼쪽은 3.6.8버전의 스크립트며, 오른쪽은 arm64 칩셋을 지원하는 3.9.1버전입니다. 왼쪽 스크립트는 arm64 환경을 지원하지 않으므로 에러가 발생합니다. 따라서 arch 명령어로 실행 환경을 x86으로 지정해주었습니다.

(좌) Python3.6.8 버전 .configure / (우) Python 3.9.1 버전 .configure

Blog https://chrisjune.dev Work for www.29cm.co.kr