Daylogs/Python
conda 환경에서 pip 패키지도 동시에 업데이트 하기
ohgyun
2018. 10. 19. 11:35
발생일: 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 파일을 만들어 관리해야겠다.
반응형