[작성중]
0. 상황
- 새로 참여하게 된 프로젝트가 arm을 지원하지 않는 python 버전(3.7.9)을 사용하고 있었다.
- 하지만 나의 노트북은 M1(arm)... 어쩌지!
( 관련된 나의 python 관련 삽질 일기는 여기! 에서 볼 수 있다 ...;-< )
- 팀 리드분이 "rosetta" 를 이용해 intel 기반으로 환경 설정을 맞출것을 요청하셔서,
iterm을 복제해 rosetta 전용 터미널로 적용하고 brew나 pyenv처럼 자주 사용할 명령어에 대해서는 alias를
적용해 사용하기러 결정했다. + 각 아키텍쳐별 터미널을 켤때 해당 아키텍쳐별 PATH로 알아서 변경해준다면..?
1. rosetta가 적용된 iterm2를 만든다!
1. finder 에서 [응용프로그램] 으로 이동
2. iterm2를 우클릭 - "복제" 선택
3. iTerm 복제본 우클릭 - "이름변경"선택 - 원하는 이름으로 변경(필자는 'R'osetta 환경이기에 앞에 r을 붙여주었다)
4. rosetta전용으로 사용할 iTerm 우클릭 - "정보 가져오기" - "Rosetta를 사용하여 열기" 활성화
짜잔..! 이렇게 Rosetta를 사용해 실행시킬 iTerm을 생성했다.
5. rosetta가 적용된게 맞는지 확인!
arch //리눅스 명령어 - 현재 시스템의 아키텍처를 출력한다
// rosetta로 실행된 경우 : i386 출력
// M1 default 환경에서 실행된 경우 : arm64 출력
iTerm에서는 arm64, RiTerm에서는 i386이 출력된다.
즉, RiTerm 터미널에 rosetta 환경이 잘 적용되었다고 볼 수 있다!
2. Rosetta전용 Brew 설치
- i386 아키텍처용을 위한 brew를 설치해줘야지~!
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
* 주의! : arm용 brew와 동일한 폴더에 두기위해 저장할 위치를 커스텀 하게되면, 추후 i386환경과 arm 환경에서 각각 탐색할 PATH를 지정해줄 때 어려움을 겪에 될 수 있음으로 default 저장 위치로 그대로 저장하는걸 추천한다!
3. Rosetta전용 Pyenv 설치
- pyenv 또한 i386을 위한 버전으로 따로 설치를 해줬다(물론, rosetta 환경의 brew를 활용해서..!)
arch -x86_64 /usr/local/bin/brew install pyenv
rosetta를 사용해 i386용 pyenv까지 설치를 완료했는데...
여기서 잠깐..! brew도 pyenv도 자주 사용하는 명령어인데... "arch -x86_64 /usr/local....." 매번 쳐주는게 맞나..?
python 의 버전별 환경 테스트를 진행해야하는 나는 얼마나 이 명령어를 쳐야하는지 모르겠는데...?
바로 alias를 설정해버렸다
4. alias 설정하기
- 뒤에 숫자 "86"을 붙이는분들이 많은것 같은데, 나는 "r"osetta를 사용해 실행할 brew 와 pyenv이니 각 단어 앞에 "r"을 붙여주는 방식이 내가 기억하기에는 더 좋을 것 같았다. 따라서 주로 사용할 cmd인 iterm의 .zshrc에 아래와 같이 alias를 설정해주었다.
# rosetta 환경 brew, pyenv
alias rbrew="arch -x86_64 /usr/local/bin/brew"
alias rpyenv="arch -x86_64 /usr/local/bin/pyenv"
5. 실행 환경별 자동 경로 설정하기
- 헤헤 내가 켜는 터미널의 아키텍쳐에 맞춰서 PATH가 변경된다면? 최고 아닐까? iterm의 .zshrc에 현재 실행중인 터미널의 아키텍처에 맞추어 PATH들을 수정하는 스크립트를 짜서 설정해 두었다.
#iTerm 실행중 아키텍처에 따른 환경변수 설정
# Homebrew PATH 설정
if [ "$(uname -m)" = "arm64" ]; then
# ARM 아키텍처용 경로
echo "Setting PATH for ARM architecture"
export PATH="/opt/homebrew/bin:$PATH"
elif [ "$(uname -m)" = "x86_64" ]; then
# Intel 아키텍처가 Rosetta 2를 통해 실행되는지 확인
if [ "$(sysctl -in sysctl.proc_translated)" = "1" ]; then
echo "Running under Rosetta 2"
fi
# Intel 아키텍처용 경로
echo "Setting PATH for Intel architecture"
export PATH="/usr/local/bin:$PATH"
else
echo "Unknown architecture: $(uname -m)"
fi
사실 이 설정의 파급력은 아직 확인이 되지 않았기에 조금 위험할수도 있지만, 아직까지는 문제가 없이 + 오히려 환경 분리가 명확하게 된채로 사용할 수 있어 좋았다.
다음 글은 이번 설정을 기반으로 PYTHON 3.7.9프로젝트를 M1 노트북에서 실행하는 과정을 담아볼까 한다!
'Project > (공통)troubleshooting' 카테고리의 다른 글
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!