miniforge: 파이썬과 R의 패키지 및 개발 환경 관리 도구
1 파이썬과 R의 의존성 지옥
파이썬과 R에는 유용한 패키지들이 아주 많습니다. 그러다보니 여러 패키지들이 버전이 서로 충돌하거나 호환되지 않는 경우가 발생하곤 합니다. 예를 들어 A 패키지가 B 패키지 1.0 버전에 기반해 만들어졌는데 C 패키지가 B 패키지 2.0 버전을 요구한다면 A와 C를 동시에 사용할 수 없는 경우가 생깁니다.
이런 의존성 문제를 해결하기 위해 다양한 방법론들이 등장했습니다. 파이썬의 경우에는 venv + pip
, Pyenv
, Poetry
, Conda
, PDM
등과 같은 새로운 패키지를 이용해 프로젝트 별로 의존성을 관리할 수 있도록 합니다. 그 중에서 저는 Conda
를 이용해 프로젝트를 관리합니다.
2 아나콘다(Anaconda)
콘다는 Windows, macOS 및 Linux에서 실행되는 오픈 소스 패키지 관리 시스템이자 환경 관리 시스템으로 파이썬 뿐만 아니라 R 패키지도 지원합니다. 그래서 주로 과학 분야에서 많이 사용되는 도구입니다. 그러나 덩치가 커서 작은 프로젝트에는 너무 많은 의존성과 리소스를 잡아먹는다는 단점이 있죠. 그리고 개인용도가 아닌 경우에는 유료입니다.
3 미니포지(miniforge)
miniforge는 덩치큰 아나콘다를 아주 날씬하게 만드는 프로젝트입니다. 그래서 아래와 같은 특징을 갖습니다.
- 기본(그리고 유일한) 채널로 conda-forge를 사용.
- 표준 Python 인터프리터(일명 “CPython”) 대신 PyPy에 대한 지원.
- 콘다보다 더 빠른 맘바(mamba)도 지원.
- 다양한 CPU 아키텍처(x86_64, ppc64le, Apple M1을 포함한 aarch64)지원.
3.1 맘바(mamba)는 또 뭐죠?
콘다의 다른 단점에 패키지 설치 속도가 느리다는 점이 었습니다. 그래서 C++
으로 작성된 맘바라는 도구가 새로 나오게 되었죠.
파이썬 생태계에는 항상 새로운 도구가 우후죽순 나오죠. 그것이 장점이자 단점 입니다.
3.2 설치하기
공식문서에서 각각의 OS에 맞는 설치 방법을 찾아 볼 수 있습니다. 저는 리눅스를 사용하기에 아래 명령어로 설치 하였습니다.
3.3 리눅스와 맥
wget "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh"
bash Mambaforge-$(uname)-$(uname -m).sh
3.4 윈도우즈
Github repo를 참고하세요.
4 개발 환경 설정
miniforge
를 설치했으면 이제 실제로 사용법을 알아 보겠습니다.
4.1 가상환경 만들기
맘바포지의 (base)
환경에 왠만하면 아무런 패키지를 설치하지 않을 것을 권장합니다. 따라서 새로운 가상환경인 ipynb
를 만들어 주피터랩을 사용해 보겠습니다.
mamba create -n ipynb python=3.11 pip r-base r-essentials
기존 conda
명령어에서 mamba
로 바꾸기만 하면 됩니다. python=3.11
을 통해 파이썬 버전을 지정할 수 있고, PYPI 패키지를 설치하기 위해 pip
도 같이 설치해줍니다. 저는 R을 사용하기 위해 r-base
, r-essential
도 설치해주었습니다.
4.2 가상환경 활성화 하기
생성된 가상환경은 mamba env list
명령어를 통해 리스트로 볼 수 있습니다. 위에서 만든 가상환경을 활성화 하려면 다음 명령어를 입력합니다.
mamba activate ipynb
4.3 Anaconda에서 제공하는 패키지
Anaconda.org에서 제공하는 파이썬과 R 패키지는 다음 명령어를 사용해 쉽게 설치할 수 있습니다. miniforge
에서 사용하는 기본 채널은 conda-forge
입니다. 그래서 해당 채널을 원하지 않는 경우에는 검색을 해보고 conda install
명령어를 복사해서 사용합니다.
Anaconda.org를 살펴보면 동일한 이름의 패키지도 다양한 채널을 가지고 있습니다. 서로 다른 채널을 섞어서 사용하면 의존성 문제가 발생할 수 있기 때문에 가능하다면 동일한 채널의 패키지들로 구성하세요.
4.3.1 설치하기
mamba install [패키지]
4.3.2 제거하기
설치한 패키지를 제거하고 싶다면 아래 명령어를 사용합니다.
mamba remove [패키지]
4.4 PyPI에서 제공하는 파이썬 패키지
대부분의 경우 conda
명령어로 해결할 수 있지만 가끔 PyPI
에서만 제공하는 패키지를 써야할 경우도 있습니다. 그럴 때는 먼저 PYPI에서 패키지 검색을 해보시고 아래 명령어를 사용하는 것을 권장합니다.
이 부분이 약간이 까다로운 부분입니다. 파이썬의 내장 패키지인 pip
을 사용하다보면 실수로 global(프로젝트 폴더가 아닌 전체를 의미)에 설치를 하는 경우가 생기기 때문이죠.
pip
명령어는 가장 마지막 수단이 되어야 합니다. 항상 mamba install
을 최우선으로 고려하세요.
4.5 CRAN에서 제공하는 R 패키지
다시 한번 Anaconda.org에서 제공하는 방법을 사용하는 것이 최선입니다만, 만약 그게 어렵다면 R
콘솔에 들어가서 install.packages("[패키지 이름]")
으로 설치할 수 있습니다.
4.5.1 설치
- 먼저
conda
가상 환경에서pip
설치
mamba install pip -y
pip install
대신 다음 명령어를 사용하기
python -m pip install [패키지]
4.5.2 제거하기
설치한 패키지를 제거하고 싶다면 아래 명령어를 사용합니다.
python -m pip uninstall [패키지]
## 설치된 패키지 제거하기
설치한 패키지를 제거하고 싶다면 아래 명령어를 사용합니다.
```bash
mamba remove r-tidyverse
4.6 가상환경 비활성화하기
일반적으로는 그냥 터미널을 꺼버리고는 합니다만, 실수를 방지하기 위해 다음 명령어를 습관적으로 써주는 것이 좋습니다.
mamba deactivate
4.7 가상환경 제거하기
필요없는 가상 환경은 다음과 같이 제거 합니다.
mamba env remove -n ipynb
4.8 의존성 정보를 파일로 저장하기
배포 혹은 프로젝트간의 전환을 위해 의존성을 파일로 저장해야하는 경우가 생깁니다. 그럴 때에는 아래와 같이 env.yaml
파일을 생성하면 됩니다.
mamba env export > env.yaml
4.9 의존성 파일로 부터 가상환경 만들기
위 명령어로 생성된 파일을 가지고 다음 명령어를 사용해 새로운 가상환경을 만들 수 있습니다. 생성된 가상환경의 이름은 env.yaml
파일 속에 적혀있는 것과 동일합니다.
mamba env create -f env.yaml
5 마치며
파이썬과 R에는 다양한 패키지가 있습니다. 그렇기 때문에 패키지의 버전과 호환성을 관리하는 일은 종종 문제를 일으킵니다. 이미 다양한 의존성 관리 도구들이 있지만 각각에는 장단점이 존재하고 유저의 취향과 프로젝트에 따라 도구를 선택해야 합니다. 그러니 패키지 관리에는 왕도가 없습니다. 항상 최신 도구가 나오면 써보고 적용해보세요.