environment.yml & requirements.txt 사용법
environment.yml 이란?
environment.yml 파일은 Conda 환경의 설정을 YAML 형식으로 저장한 파일이다. 이 파일에는 환경 이름, Python version, 필요한 package 및 channel 정보가 포함되어 있어 다음과 같은 이점을 제공한다.
- 환경 재현성: 팀원이나 다른 system에서도 동일한 환경을 쉽게 생성할 수 있다.
- 버전 관리: 사용 중인 package의 version과 dependencies를 명확하게 관리할 수 있다.
- 자동화: CI/CD pipeline 등에서 환경 구축을 자동화하는 데 유용하다.
environment.yml 파일의 기본 구조
name: my_env
channels:
- conda-forge
- pytorch
- nvidia
dependencies:
- python=3.9
- pytorch
- torchvision
- pytorch-cuda=12.1
- pandas
- matplotlib
- tensorboardx
- pip
- pip:
- opencv-python>=4.5.5.64
- transformers>=4.5.1
- OpenNMT-py==2.2.0
- timm==0.5.4
위 파일의 각 항목이 의미하는 바는 다음과 같다.
-
name: 생성할 conda 환경의 이름을 의미한다. -
channels: package를 설치할 때 사용할 channel 목록을 의미한다. -
dependencies: 환경에 설치할 package 목록을 의미한다.- Conda package는 일반적으로 list 형태로 작성한다.
- pip로 설치할 package는
pip:항목 하위에 작성한다.
environment.yml 파일 작성 및 사용법
1. 파일 작성 단계
- 텍스트 에디터를 열어
environment.yml파일을 생성한다. - 환경 이름과
channels를 지정한다. (예:conda-forge,defaults) -
dependencies항목에 Python version과 필요한 package를 추가한다. - Conda에서 제공하지 않는 package는
pip:하위에 추가한다.
2. 환경 생성하기
터미널에서 아래 명령어를 실행하여 환경을 생성한다.
conda env create -f environment.yml
생성된 환경은 다음 명령어로 활성화한다.
conda activate my_env
3. 기존 환경 내보내기 (Export)
현재 활성화된 환경을 파일로 공유하고 싶을 때 사용한다.
conda env export > environment.yml
주의점
Conda channel과 pip를 혼용하여 package를 설치할 경우, dependency 충돌이 발생할 수 있다. 예를 들어 conda channel로 numpy를 설치한 뒤, pip로 scikit-learn을 설치하면 기존에 설치된 numpy version이 의도치 않게 변경될 수 있다.
따라서 conda 또는 pip 중 하나의 방식으로 통일하여 package를 설치하는 것을 권장한다. 다만 conda 혹은 conda-forge channel에 존재하지 않는 package는 pip로 설치할 수밖에 없으므로, 이러한 경우에 한해 제한적으로 pip를 사용하는 것이 안전하다. 부득이하게 혼용해야 한다면, conda package를 먼저 모두 설치한 뒤 pip package를 마지막에 일괄적으로 설치하여 충돌 가능성을 최소화할 수 있다.
requirements.txt 란?
requirements.txt는 Python project에서 필요한 package 목록과 각 package의 version 정보를 기록한 텍스트 파일이다. 주로 pip package manager를 통해 library를 설치하고 관리할 때 사용하는 표준 방식이다.
- 범용성: Conda뿐만 아니라 일반적인 Python 가상환경(venv) 등 모든 Python 환경에서 널리 사용된다.
- 경량성: 환경 설정 전체를 담기보다 설치할 package list에 집중하므로 관리가 간편하다.
- 유연성: 특정 version(
==), 최소 version(>=), 또는 특정 범위의 version을 자유롭게 지정할 수 있다.
requirements.txt 파일 작성 및 사용법
1. 파일 작성 단계
- 텍스트 에디터를 열어
requirements.txt파일을 생성한다. - 설치하고자 하는 package 이름을 한 줄에 하나씩 입력한다.
- 특정 version이 필요할 경우 package 이름 뒤에
==,>=,<=등의 연산자와 함께 version을 명시한다. (예:pandas==2.0.3) - 주석이 필요한 경우
#을 사용하여 설명을 추가할 수 있다.
2. 환경 생성 및 설치하기
environment.yml과 달리 가상환경을 먼저 생성하고 활성화한 뒤 package를 설치해야 한다.
# 가상환경 생성 (Python version 지정 권장)
conda create -n my_env python=3.9
# 가상환경 활성화
conda activate my_env
# requirements.txt에 기록된 package 설치
pip install -r requirements.txt
3. 기존 환경 내보내기 (Export)
현재 활성화된 환경에 설치된 pip package list를 파일로 저장하여 공유하고 싶을 때 사용한다.
pip freeze > requirements.txt
environment.yml과 requirements.txt 비교
두 파일 모두 환경 재현을 위한 도구이지만, 관리 범위와 사용 방식에 차이가 있다.
-
environment.yml은 Python version, conda channel, conda package, pip package를 모두 포함하여 환경 전체를 정의한다. -
requirements.txt는 pip package list만 포함하므로 Python version이나 가상환경 생성은 별도로 처리해야 한다.
활용 팁
- 협업: 팀원과 동일한 환경을 공유하여 version 불일치 문제를 예방할 수 있다.
- 자동화: CI/CD pipeline이나 Dockerfile과 결합하여 환경 구성을 자동화할 수 있다.
- 관리 용이: 환경의 변경 내역을 Git과 같은 version 관리 system으로 추적할 수 있다.