맥북 M1 M2 Python 라이브러리 설치 오류 해결 mach-o architecture 에러 완벽 가이드

맥북 M1/M2에서 Python 라이브러리를 설치하다가 "mach-o file, but is an incompatible architecture" 또는 "symbol not found in flat namespace (_OBJC_CLASS_$...)" 같은 에러를 마주한 적이 있습니까? 이는 ARM64(Apple Silicon)와 x86_64(Intel) 아키텍처 간 바이너리 호환성 문제로, Rosetta 2를 통한 에뮬레이션 환경과 네이티브 환경이 혼재되어 발생합니다. 이 글에서는 아키텍처 충돌의 원인을 진단하고, 환경별 해결 방법을 제시합니다.


맥북M1M2Python라이브러리설치오류해결mach-oarchitecture에러완벽가이드


1. 문제의 본질: ARM64와 x86_64 바이너리 충돌

Apple Silicon 맥북은 ARM64 아키텍처를 사용하지만, Rosetta 2를 통해 Intel 기반(x86_64) 바이너리를 에뮬레이션할 수 있습니다. 문제는 Python 인터프리터와 설치된 라이브러리의 아키텍처가 일치하지 않을 때 발생합니다.

  • 케이스 1: ARM64 Python에서 x86_64용으로 컴파일된 라이브러리(예: NumPy, Pillow)를 import할 때
  • 케이스 2: Homebrew로 설치한 패키지가 x86_64 버전인데, pip로 설치한 라이브러리는 ARM64 네이티브인 경우
  • 케이스 3: Anaconda 환경이 Rosetta 2 모드로 실행 중인데, 시스템 Python은 네이티브 ARM64인 상황

현재 실행 중인 Python의 아키텍처를 확인하려면 터미널에서 다음 명령을 실행하십시오:

python3 -c "import platform; print(platform.machine())"

출력이 arm64면 네이티브, x86_64면 Rosetta 2 환경입니다.

2. 해결 방법 1: 네이티브 ARM64 환경 구축 (권장)

대부분의 주요 라이브러리(NumPy, Pandas, TensorFlow 등)는 2022년 이후 ARM64 네이티브 빌드를 제공합니다. 성능과 호환성을 모두 확보하려면 네이티브 환경을 우선 구축하십시오.

2-1. Homebrew 네이티브 설치 확인

  • Homebrew가 /opt/homebrew에 설치되어 있으면 ARM64 네이티브 버전입니다.
  • 만약 /usr/local에 설치되어 있다면 Intel 버전이므로, 재설치를 권장합니다.
  • 재설치 명령: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2-2. Python 가상환경 재생성

  1. 기존 venv 또는 conda 환경을 삭제합니다.
  2. 네이티브 Python 3.x를 설치: brew install python@3.11
  3. 가상환경 생성: python3.11 -m venv myenv
  4. 활성화 후 라이브러리 재설치: source myenv/bin/activate && pip install --upgrade pip && pip install numpy pandas

주의: Anaconda를 사용 중이라면, conda install python=3.11 명령으로 환경 내 Python을 업데이트한 뒤, conda clean --all로 캐시를 정리하십시오.

3. 해결 방법 2: Rosetta 2 강제 실행 (레거시 라이브러리 대응)

일부 오래된 라이브러리(특정 버전의 OpenCV, PyTorch 구버전 등)는 ARM64 빌드가 없을 수 있습니다. 이 경우 Rosetta 2 환경에서 일관되게 실행하는 것이 차선책입니다.

3-1. Rosetta 2로 터미널 실행

  1. Finder에서 응용 프로그램 > 유틸리티 > 터미널을 찾습니다.
  2. 터미널 앱을 우클릭 → 정보 가져오기"Rosetta를 사용하여 열기" 체크
  3. 터미널 재시작 후 arch 명령 실행 시 i386 출력 확인

3-2. x86_64 전용 Python 환경 구축

  • Homebrew x86_64 버전 설치 (별도 경로): arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • x86_64 Python 설치: arch -x86_64 /usr/local/bin/brew install python@3.10
  • 가상환경 생성 시 명시적으로 아키텍처 지정: arch -x86_64 /usr/local/bin/python3.10 -m venv myenv_x86

단점: Rosetta 2 에뮬레이션으로 인해 네이티브 대비 10~30% 성능 저하가 발생합니다.

4. 트러블슈팅 체크리스트

위 방법으로 해결되지 않는다면, 아래 항목을 순차적으로 점검하십시오.

  • pip 캐시 삭제: pip cache purge 실행 후 재설치
  • 컴파일러 도구 설치: xcode-select --install로 Command Line Tools 설치 확인
  • 환경 변수 충돌: echo $PATH로 /usr/local/bin과 /opt/homebrew/bin이 혼재되어 있는지 확인. .zshrc 또는 .bash_profile에서 중복 제거
  • 라이브러리 버전 명시: 최신 버전이 ARM64를 지원하지 않을 수 있으므로, pip install numpy==1.23.5처럼 안정 버전으로 다운그레이드 시도

디버깅 팁: otool -L /path/to/library.so 명령으로 바이너리의 아키텍처와 의존성을 직접 확인할 수 있습니다.

요약 및 Action Item

맥북 M칩에서 Python 라이브러리 설치 오류는 대부분 아키텍처 불일치에서 기인합니다. 네이티브 ARM64 환경 구축을 우선 시도하고, 레거시 라이브러리가 필요한 경우에만 Rosetta 2 환경을 별도로 구성하십시오. 두 환경을 혼용하지 말고, PATH 환경 변수와 가상환경을 명확히 분리하는 것이 핵심입니다.

당장 실행할 것: 터미널에서 python3 -c "import platform; print(platform.machine())"을 실행하여 현재 아키텍처를 확인하고, 네이티브(arm64)가 아니라면 Homebrew와 Python을 재설치하십시오.




# 함께 보면 좋은 글

댓글