티스토리 뷰

발생일: 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 4.6.13 부터 해결되었다고 한다.


해결책:

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 파일을 만들어 관리해야겠다.


반응형
댓글
공지사항