conda 환경에서 pip 패키지도 동시에 업데이트 하기

발생일: 2018.10.18

키워드: conda env update, pip install --upgrade, environment.yml, 콘다 환경, 아나콘다, 미니콘다, anaconda, miniconda

문제:

서비스에서는 conda 패키지를 envrionment.yml 파일로 관리하고 있다.
이런 식이다.

[environment.yml]
name: foo
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.7
  - ipython
  - jupyter
  - pandas
  - numpy
  - pip:
    - konlpy
    - ...

헌데, conda env update 를 실행해도, 환경 파일에 정의해둔 pip 패키지는 업데이트되지 않는다.

어떻게 해야할까?


해결책:

conda environment 내에 정의한 pip 내의 패키지는 환경을 생성(conda create)할 땐 설치되지만, conda env update 명령으로 업데이트되진 않는다.
패키지가 별도로 관리되기 때문이다.

conda list 의 결과 내에 pip 패키지도 포함되어 있기 때문에, 이 목록으로 별도로 업데이트하게 처리했다.

conda list | grep "<pip>" | cut -d " " -f 1 | xargs pip install --upgrade



논의:

# 환경 파일에서 채널은 뭔가?

- 채널을 정의하면 conda install 로 패키지를 설치할 때, 해당 채널의 패키지를 설치한다.
- conda-forge 채널의 패키지를 설치하는 것이 안정성 측면에서 높다고 한다.
- 설치하려는 패키지가 정의한 여러 채널에 중복으로 있는 경우, 선호도가 높은 채널(정의한 순서대로)의 것을 먼저 사용한다.


# 환경 파일에서 pip 정의해야 하나?
- pip는 기본으로 설치된다.
- environment.yml 에서 pip 는 생략해도 된다.


# 환경 파일을 자동으로 관리할 수 없을까? lock 을 한다거나.
- conda env export 명령으로 enviroment.yml 파일을 생성할 수 있지만, OS 간 호환성이 보장되지 않는다.
- 패키지에 따라 OS 별로 버전이 다른 경우가 있기 때문이다.
- 따라서, OS 간 호환이 필요하다면, conda 의 environment.yml 파일은 수동으로 관리해주는 게 좋다.


나중엔 운영과 동일하게 docker 로 환경을 구성하고, 필요한 시점에 conda env export 로 lock 파일을 만들어 관리해야겠다.

카테고리

분류 전체보기 (702)
About me. (6)
Daylogs (667)
비공개 (0)
영어공부 (0)
My works - 추억 (29)