여러 대회랑 프로젝트를 동시에 하다 보니
어느 순간부터 “코드를 못 짜서 막히는 게 아니라, 환경 때문에 멈추는 시간”이 점점 늘어나기 시작했다.
이렇게 서로 다른 코드들을 왔다 갔다 하다 보니,
Python 버전, 패키지 버전, 플랫폼 차이가 한 번 꼬이면
그날은 그냥 환경만 붙잡고 끝나는 날이 많았다.
이번 글에서는 최근에 겪었던 환경 관련 문제들을 간단히 정리하고,
그걸 계기로 Python 버전 / venv / Docker를 같이 공부해야겠다고 마음먹게 된 이유를 기록해 두려고 한다.
최근 몇 달 동안 공통적으로 반복됐던 패턴은 대략 이렇다.
pip install로 필요한 패키지를 깐다. 주된 원인은 대부분 환경 쪽이었다.
torch, transformers, ultralytics, opencv 같은 패키지 버전 충돌 ModuleNotFoundError, ImportError 문제 자체는 구글링하면 어떻게든 풀린다.
하지만 매번 패키지 삭제 → 재설치 → 버전 조정을 반복하다 보니,
정작 모델을 개선하거나 실험을 더 해볼 시간과 집중력이 계속 깎이는 느낌이었다.
처음에는 그냥 “최신 Python 쓰면 되지”라는 생각이었다.
로컬에 최신 Python을 깔아두고, 전역 환경에 pip install로 계속 쌓아 올렸다.
시간이 지나면서 이런 상황이 생겼다.
결국, 처음부터 환경을 분리하지 않고 쓰다가
나중에 커진 대가를 한 번에 맞는 느낌이었다.
그래서 앞으로는:
지금 기준으로 가져가고 싶은 기본 템플릿은 아주 단순하다.
# 1) 프로젝트 폴더 진입
cd my-project
# 2) Python 버전 명시 (예: 3.11)
python3.11 -m venv .venv
# 3) 가상환경 활성화
# Windows: .venv\Scripts\activate
source .venv/bin/activate
# 4) 패키지 설치
pip install -r requirements.txt # 또는 개별 설치 후
pip freeze > requirements.txt # 의존성 기록
이렇게 하면:
requirements.txt만 있으면 시간이 지나도 환경을 다시 구성할 수 있고특히 “몇 달 뒤에 다시 열어볼 프로젝트”일수록
코드 + venv + requirements 조합으로 정리해 두는 게 훨씬 안전하다는 걸 느꼈다.
venv만 써도 많이 나아지긴 한다.
그래도 여전히 애매하게 남는 부분이 있다.
이런 것들을 한 번에 줄이려면,
결국 환경 전체를 컨테이너로 묶는 쪽(Docker)이 자연스러운 해답 같다는 생각이 들었다.
아직 Docker를 자유롭게 쓰는 단계는 아니지만,
일단은 이런 정도의 구조를 목표로 잡고 있다.
FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]
장기적으로는:
이런 것들은 가능하면 Docker 기준으로도 한 번 정리해 두는 것을 목표로 삼고 있다.
이번 학기/올해를 지나면서,
개발환경에 대해 최소한 아래 네 가지는 지키려고 한다.
Python 버전 명시
3.10 / 3.11 중 하나로 고정프로젝트별 venv 필수
.venv + requirements.txt를 기본 셋업으로 사용중요한 프로젝트는 Docker도 함께 고려
환경 복구 방법을 기록으로 남기기
환경 설정은 눈에 잘 보이는 성과도 아니고,
성능 점수처럼 수치로 바로 찍히는 것도 아니다.
그래도 여러 프로젝트와 대회를 거치면서
환경의 중요성에 대해 확실히 느끼게 되었다.
앞으로 진행할 프로젝트들에서는
환경에 덜 끌려다니고,
코드와 실험에 더 집중할 수 있도록
조금씩이라도 개선해 나가 보려고 한다.
긴 글 읽어주셔서 감사합니다 :)