티스토리 뷰
M1칩셋,,
아무리 이번 M1칩셋을 달고 나온 Mac이 좋다고 하지만. 끝까지 버티다 M1.2 or M2 version이 나오면 구매하려고 마음먹었었지만. 피치못할 사정때문에 결국 M1 Mac을 구매할 수 밖에 없었다. 당연히 아직 지원하지 않는 패키지들이 많을 것으로 예상은 하고 있었지만. pip로 scipy를 설치하지 못할줄이야!!
로컬 python환경을 구성할 때, 처음 단추를 잘 끼우려면 Project마다 구분되는 가상환경을 만들어야 한다. 이번 로컬 환경을 변경하면서, poetry
+ pip
조합으로 설치해보려고 하던 중. 세상에 scipy
가 아직 M1에 맞춰 업데이트가 안되있을줄이야..
다행히 conda miniforge
에서 머신러닝 환경에 필요한 대부분의 패키지들을 로제타버전이 아닌 M1칩셋에 맞게 제공하고 있다는 글을 참고해서 이참에 conda
를 사용해보기로 했다. 그동안 pyenv, virtualenv는 사용해 봤지만 conda
는 처음이라 기록해 둔다.
Anaconda, miniforge?
쉽게 생각하면 conda도 pip와 마찬가지로 패키지 매니져의 한 종류다. pip는 PyPI(python package index: repository)에서 제공하는 패키지들을 설치할 수 있는 도구이고 conda는 따로 패키지들을 관리하고 있는 자체 repository가 있다고 생각면된다. 여러 차이점이 있겠지만 가장 큰 차이점은 pip는 패키지 매니져의 기능에 한정된다면 conda는 python 버전을 골라 직접 python을 설치할 수 있다는 점이다.
conda의 대표적인 installers는 Anaconda, miniconda, miniforge 가 있다. 처음 두 가지는 anaconda에서 개발되어 관리되고, miniforge는 community 에서 만들어진 버전이다. 만약 python을 처음 접하고, 아직 터미널이 두려운 초심자는 맘편하게 Anaconda를 설치하면 된다. Anaconda를 설치하면 python + 5G정도 되는 250개 이상의 package들도 같이 설치해버리고, navigator라는 ui도 제공해주기 때문에 초보자의 접근이 쉽다고 할 수 있다. 하지만 굳이 다 설치할 필요는 없고, 또 결국 package를 직접 설치하고, 버전을 관리해보는 경험과 가상환경 구축에 익숙해질 필요가 있기 때문에 다른 방법을 시도해 보는 것을 추천한다.(물론 나도 익숙해져야 한다..)
miniconda, miniforge는 anaconda에 따라오는 패키지들을 뺀 버전이라고 생각하면된다. 최소 동작 환경을 설치하고, 사용자가 선택해서 필요한 패키지를 설치하면 된다. 대략적인 흐름은 이렇다.
- mini forge 설치
- 콘다 가상환경 만들기
- 패키지 설치
1) miniforge 환경 구성
- miniforge 설치
다양한 방법이 있겠지만 brew로 설치하는게 가장 좋지 않을까
miniforge 공식 깃헙 https://github.com/conda-forge/miniforge
$ brew install miniforge
# arm64 apple silicon 버전으로 설치된다.
(**) Apple silicon builds are experimental and haven't had testing like the other platforms. (주의사항)
2) 가상환경 만들기
두 가지 방법으로 가상환경을 만들 수 있다. 첫 번째는 unique한 이름을 지정해 가상환경을 만들고 사용하는 방법이다. 이 방법을 사용하면 가상환경은 standard locations (/user/.../envs/)에 셋업된다. 두 번째는 unique한 이름을 지정하지 않고 개별 project folder마다 가상환경을 만드는 방법이다. 이 방법의 경우 가상환경은 지정해준 project root folder에 셋업된다.
# conda 정보 확인
$ conda info
# 1번 방법
$ conda create —-name <환경이름> python==3.9.1 # 버전 지정 안할 수도 있다.
# 2번 방법
$ conda create —prefix ./path/to/preject/root/.conda-env # conda-env가 패키지가 설치될 장소
# 설치된 환경 리스트 확인
$ conda env list
# 가상환경 실행
$ conda activate <환경이름> # 1번의 경우
$ conda activate ./path/to/preject/root/.conda-env # 2번의 경우
가장 아래 prompt에 (base)가 붙어 있는데 현재 base conda 환경이 실행중인것을 나타낸다. 가상환경을 만들고 conda activate (환경이름)
으로 시작하려고 하면 $ conda init (shell)
을 수행하고 restart하라는 애러가 발생할 때가 있다. zsh shell을 사용중이니 conda init zsh를 입력해주자. 그리고 나서 shell을 다시 시작하면 항상 conda (base) 환경으로 시작된다.
2번째 방법으로 만든 환경을 activate하면 prompt앞에 path가 지저분하게 출력되는 것을 볼 수 있다. 아래 라인을 입력해서 수정해 줄 수 있다.
$ conda config --set env_prompt '({name})'
깔끔하게 이름이 표시된다. 주의할 점은 1번과 2번의 방법을 섞어서 사용하려면 1번에서 지정하는 unique이름과 2번의 이름이 겹치지 않게 해야 한다.
The second option is using common name to all of your environments, and create a new one for each project folder, such as conda-env. This means, for any project folder you are working on, you can reference the environment name the same way, and use in any on your automation scripts in a consistent manner. Please note, the subcommand --prefix is exclusively mutual with the--name pick your poison carefully!
3) 패키지 설치
$ conda search scipy
$ conda install -n <환경이름> -c <채널이름> <package_name>=<version>=<build_string>
# 나의 경우
$ conda install -n AI_local -c conda-forge scipy=1.6.0=py39h73ea49b_0
본격적으로 패키지를 설치 하기 전에 한가지 알아두어야 할 것이 있다. channels는 conda에서 관리하는 패키지들의 저장소들이며, 각각 분리되어 관리된다. 같은 패키지라도 channel에 따라 다른 버전이 제공될 수 있고, 없는 패키지가 있을 수 도 있다. 이정도만 일단 알고 넘어가도록하자. 어차피 현재까지 conda-forge의 miniforge만 유일하게 Apple Silicon을 지원하기 때문이다.
scipy도 잘 설치되고, sklearn, jupyter lab 등등 전부 설치가 잘 되는 것을 확인했다. 이전 환경에서 작동하던 코드도 잘 돌아간다.! 이제 열심히 공부만 하면 되겠음..
참고
https://conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands