오늘도 습관처럼 적어대는 pip install ... 가끔가다 적어보는 conda install... 컴퓨터과학 전공으로 대학원 입학도 앞두고 있는데 이제 무지성 코딩 그만하고 정확한 원리(?)를 알아보도록 하자
conda는 파이썬을 위해 개발되었지만 다른 언어에도 사용이 가능하다고 한다. conda는 패키지 버전 이슈를 해결해주는 아주 멋진 친구이고 여러모로 개발을 편하게 도와주는 친구라고 보면 되겠다.
프로젝트를 여러개 진행할때 각 프로젝트마다 버전이나 패키지 설치환경을 분리하여 사용하기 위해서 가상환경이 필요하다. 하나의 환경으로 여러 프로젝트를 진행하면 버전충돌은 물론 A프로젝트에서 필요한 A패키지들과 B프로젝트에서 필요한 B패키지들이 섞이게 되고 그러면 생각만해도 끔찍하다. 이런 상황을 막기 위해 가상환경(Virtual Environment)가 필요하고 대표적인 프로그램으로 conda 와 virualenv 등이 있다.
아나콘다(Anaconda)
수학과 과학 분야에서 사용되는 여러 패키지들을 묶어 놓은 파이썬 배포판에 포함되어 있는 패키지 매니저이자 가상환경 관리 프로그램. 아나콘다(Anaconda)는 기존 파이썬에 비해 매우 용량이 크지만 데이터 분석을 위한 다양한 라이브러리를 갖춘 파이썬을 배포한다. 주요 패키지가 설치가 되어있다.
미니콘다(Miniconda)
최소한의 패키지만 포함한 conda. 필요한 패키지를 개별로 설치한다.
conda-forge는 conda의 channel이었다.
conda chnnel은 패키지들이 저장되어있는 위치이다. 패키지들을 호스팅하고 관리하기 위한 방법으로 사용된다. 콘다 패키지들은 콘다 패키지 디렉토리 URL인 원격 채널로부터 다운로드가 된다. 만약 채널을 커스터마이징하지 않으면 https://repo.anaconda.com/pkgs/에서 패키지들을 자동으로 다운로드하고 업데이트한다. 다운로드하고 업데이트하는 채널을 수정할 수 있는데 -c conda-forge 처럼 수정할 수 있다.(-c는 --channel을 뜻한다.)
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에 대하여 내림차순으로 정렬한다.
정렬된 리스트에서 가장 위에 있는 패키지들 설치한다.
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 update anaconda={특정버전}
where python
VSC 에서 파이썬 인터프리터 위치를 찾을때 자주 사용한다.
conda search beautifulsoup4
anaconda repository에서 설치할 수 있는 모든 패키지 리스트 출력
conda install beautifulsoup4
를 입력해서 설치하고
conda list
로 설치되었는지 확인
conda env list
conda create -n "가상환경이름" python=3.7
conda activate "가상환경이름"
conda deactivate
conda env remove -n "가상환경이름"
conda env export> "가상환경이름.yaml"
conda env create -f "가상환경이름.yaml"
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