"제 컴퓨터에서는 됐는데요." 협업에서 가장 자주 듣는 변명이자, 가장 풀기 어려운 문제입니다. 같은 코드인데 사람마다 라이브러리 버전이 달라 누구는 되고 누구는 안 되는 상황. 이 장에서는 지금까지 만든 face 환경을 파일 하나로 박제해, 다른 컴퓨터에서도 똑같이 되살리는 방법을 배웁니다.
재현성이 왜 중요한가
재현성(reproducibility)이란 같은 설정을 어디서 되살려도 같은 결과가 나오는 성질입니다. 얼굴 인식처럼 라이브러리가 많고 버전에 민감한 분야에서는 특히 중요합니다. OpenCV 한 버전 차이로 함수 이름이 바뀌거나, 모델 가중치 형식이 달라져 코드가 멈추는 일이 드물지 않습니다. 환경을 파일로 남겨 두면, 몇 달 뒤의 나 자신과 팀원 모두가 같은 출발선에 설 수 있습니다.
environment.yml로 환경 내보내기
conda는 현재 환경의 구성을 YAML 파일로 내보내는 기능을 제공합니다. face 환경을 활성화한 상태에서 다음을 실행합니다.
conda activate faceconda env export > environment.yml
생성된 environment.yml을 열어 보면, 채널 목록과 설치된 패키지가 버전과 함께 적혀 있습니다. conda로 깐 것과 pip으로 깐 것이 구분되어 기록되는 점이 핵심입니다.
# 파일: environment.ymlname: facechannels: - conda-forgedependencies: - python=3.11 - dlib=19.24.* - opencv=4.* - pip - pip: - face_recognition - deepface - insightface - onnxruntime - emotiefflib - facenet-pytorch - mediapipe - ultralytics
dependencies 아래 위쪽은 conda로 설치한 패키지, pip: 아래는 pip으로 설치한 패키지입니다. 이렇게 한 파일에 두 종류가 모두 담기기 때문에, 이 파일만 있으면 환경 전체를 그대로 복원할 수 있습니다.
실무 팁.
conda env export는 빌드 번호까지 포함한 아주 상세한 파일을 만들어, 다른 운영체제에서는 오히려 복원이 안 될 수 있습니다. 운영체제가 섞인 팀이라면conda env export --from-history를 쓰세요. 내가 직접 설치를 요청한 패키지만 적어 주어, 운영체제가 달라도 conda가 알아서 호환 버전을 찾아 복원합니다.
다른 컴퓨터에서 환경 되살리기
environment.yml을 받은 사람은 다음 한 줄로 똑같은 환경을 만듭니다.
conda env create -f environment.yml
이 명령은 파일에 적힌 이름(face)으로 새 환경을 만들고, conda 패키지와 pip 패키지를 순서대로 설치합니다. 끝나면 conda activate face로 활성화해 바로 실습을 이어 갈 수 있습니다. 환경을 처음부터 다시 깔고 싶을 때도 유용합니다. 기존 환경을 conda env remove -n face로 지우고 이 명령으로 새로 만들면 깨끗한 상태로 돌아갑니다.
더 엄격한 재현이 필요할 때 — conda-lock
environment.yml은 "어떤 패키지를 원하는가"를 적지만, 그때그때 호환되는 최신 버전을 가져오므로 시점에 따라 미세하게 달라질 수 있습니다. 논문 실험이나 제품 배포처럼 완전히 똑같은 버전 조합을 못 박아야 한다면 conda-lock을 씁니다.
pip install conda-lockconda-lock -f environment.yml
conda-lock은 모든 패키지의 정확한 버전과 의존성을 운영체제별로 풀어 conda-lock.yml에 고정합니다. 이 잠금 파일로 환경을 만들면, 몇 달 뒤에 깔아도 글자 하나 다르지 않은 동일 환경이 재현됩니다. 학습 단계에서는 environment.yml만으로 충분하고, conda-lock은 "재현을 못 박는 도구가 있다"는 정도로 기억해 두면 됩니다.
이 장에서 기억할 것
conda env export로 환경을 environment.yml에 박제하고, 받는 쪽은 conda env create -f environment.yml로 그대로 되살립니다. 운영체제가 섞인 팀에서는 --from-history로 내보내는 것이 안전하고, 버전을 완전히 못 박아야 할 때는 conda-lock으로 잠금 파일을 만듭니다. 이로써 "제 컴퓨터에서는 됐는데요" 문제를 구조적으로 막을 수 있습니다. 다음 장에서는 드디어 웹캠을 켜서, 지금까지 만든 환경이 진짜로 동작하는지 내 얼굴로 확인합니다.