Conda 에 대한 모든 것 (콘다..아나콘다..미니콘다)

하나·2022년 7월 8일
1

Anaconda

목록 보기
3/3
post-thumbnail

오늘도 습관처럼 적어대는 pip install ... 가끔가다 적어보는 conda install... 컴퓨터과학 전공으로 대학원 입학도 앞두고 있는데 이제 무지성 코딩 그만하고 정확한 원리(?)를 알아보도록 하자

conda는 파이썬을 위해 개발되었지만 다른 언어에도 사용이 가능하다고 한다. conda는 패키지 버전 이슈를 해결해주는 아주 멋진 친구이고 여러모로 개발을 편하게 도와주는 친구라고 보면 되겠다.

그러니까 왜 필요하냐면

프로젝트를 여러개 진행할때 각 프로젝트마다 버전이나 패키지 설치환경을 분리하여 사용하기 위해서 가상환경이 필요하다. 하나의 환경으로 여러 프로젝트를 진행하면 버전충돌은 물론 A프로젝트에서 필요한 A패키지들과 B프로젝트에서 필요한 B패키지들이 섞이게 되고 그러면 생각만해도 끔찍하다. 이런 상황을 막기 위해 가상환경(Virtual Environment)가 필요하고 대표적인 프로그램으로 conda 와 virualenv 등이 있다.

콘다 .. 아나콘다 .. 미니콘다

  • 아나콘다(Anaconda)
    수학과 과학 분야에서 사용되는 여러 패키지들을 묶어 놓은 파이썬 배포판에 포함되어 있는 패키지 매니저이자 가상환경 관리 프로그램. 아나콘다(Anaconda)는 기존 파이썬에 비해 매우 용량이 크지만 데이터 분석을 위한 다양한 라이브러리를 갖춘 파이썬을 배포한다. 주요 패키지가 설치가 되어있다.

  • 미니콘다(Miniconda)
    최소한의 패키지만 포함한 conda. 필요한 패키지를 개별로 설치한다.

그렇다면 가끔씩 보이는 conda-forge는 뭐야

conda-forge는 conda의 channel이었다.

conda channel이란?

conda chnnel은 패키지들이 저장되어있는 위치이다. 패키지들을 호스팅하고 관리하기 위한 방법으로 사용된다. 콘다 패키지들은 콘다 패키지 디렉토리 URL인 원격 채널로부터 다운로드가 된다. 만약 채널을 커스터마이징하지 않으면 https://repo.anaconda.com/pkgs/에서 패키지들을 자동으로 다운로드하고 업데이트한다. 다운로드하고 업데이트하는 채널을 수정할 수 있는데 -c conda-forge 처럼 수정할 수 있다.(-c는 --channel을 뜻한다.)

conda-forge란?

conda-forge는 수천명의 기여자로 구성되어 있는 커뮤니티 채널이다. conda-forge는 PyPI와 비슷하지만 통합된 자동화 빌드 인프라와 더 많은 레시피 검토가 이루어진다.

여러 채널 검토하기

conda install -c {채널명} -c {채널명} 

으로 여러개의 채널을 거칠 수도 있다. 서로 다른 채널에서 같은 패키지를 가지고 있을 수 있다. 때문에 콘다는 채널간의 충돌을 핸들링해야만 한다.

채널 충돌 핸들링

콘다는 채널 우선 순위를 내림차순으로 탐색하며 패키지를 가져온다.
따라서 채널 목록의 가장 아래에 채널을 배치해서 안전하게 기본 채널에 없는 추가 패키지들을 설치하고 기존에 존재하는 core 패키지들의 세팅을 덮어쓰지 않을 수 있다.
콘다가 모든 채널에서 같은 이름의 패키지들을 수집하는 과정을 살펴보자

패키지들을 채널 우선 순위에 대하여 내림차순으로 정렬한다.
(동일 채널 우선 순위에 있는) 패키지 뭉치(tied packages) 들을 패키지 버전에 대하여 내림차순으로 정렬한다.
만약 Numpy 1.13.1 과 1.12.0 버전이 있다면 1.13.1 버전이 더 위에 위치하게 된다.
(동일 채널 우선 순위에 있고 같은 버전인) 아직 패키지 뭉치(still-tied packed) 인 녀석들을 build number에 대하여 내림차순으로 정렬한다.
정렬된 리스트에서 가장 위에 있는 패키지들 설치한다.

default 채널보다 conda-forge를 사용하는 네가지 이유

  1. 패키지들이 더 최신 버전일 가능성이 높다.
  2. 패키지 수가 더 많다.
  3. openblas로 의존성 관리 하는 것이 좋다. (defaults는 mkl)
  4. C extension, C wrapper 패키지 같은 컴파일된 라이브러리가 필요한 패키지들을 설치할 때 호환성이 안맞을 가능성을 낮춰준다.

conda-forge 채널 추가하기

conda install -c conda-forge를 매번 치는것은 귀찮은 일이니까 conda-forge를 primary priority로 추가하자.

채널 추가

conda config --add channels conda-forge 

등록된 채널 확인

conda config --show channels

가장 낮은 우선순위의 채널 추가

conda config --append channels {채널명} 

채널 삭제

conda config --remove channels {채널명}

conda 가상환경 목록을 보는 명령어

버전 체크와 업데이트

conda update anaconda={특정버전}

내 컴퓨터에 파이썬 찾기

where python

VSC 에서 파이썬 인터프리터 위치를 찾을때 자주 사용한다.

패키지 관리

conda search beautifulsoup4

anaconda repository에서 설치할 수 있는 모든 패키지 리스트 출력

conda install beautifulsoup4

를 입력해서 설치하고

conda list

로 설치되었는지 확인

conda env list

conda 가상환경 만들기

conda create -n "가상환경이름" python=3.7

conda 가상환경으로 활성화

conda activate "가상환경이름"

conda 실행된 가상환경 비활성화

conda deactivate

conda 가상환경 삭제하기

conda env remove -n "가상환경이름"

conda 가상환경 익스포트하기(배포용 yaml만들기)

conda env export> "가상환경이름.yaml"

conda 익스포트한 가상환경 임포트하기

conda env create -f "가상환경이름.yaml" 

터미널 시작시 conda 자동활성화 끄기

conda config --set auto_activate_base false

참고
Anaconda 4.6 Version Cheat Sheet
Stack Overflow / Should conda, or conda-forge be used for Python environments?
https://velog.io/@jeongin/Python-conda-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%AA%A8%EC%9D%8C
https://velog.io/@prayme/conda%EB%9E%80

0개의 댓글