pip을 다시 작성하지 않고 의존성 재해결을 멈춘 방법

발행: (2026년 6월 12일 AM 02:02 GMT+9)
4 분 소요
원문: Dev.to

출처: Dev.to

pip이 최소 45초 동안 생각하는 모습을 보는 것이 지겨워졌습니다. 코드를 한 줄이라도 쓰기 전에 의존성 해결 및/또는 설치를 기다려야 했으니까요. 그래서 답을 기억해 두는 해킹을 만들었습니다.
플러그인‑앤‑플레이 FastAPI 엔진 ChaCC‑API를 구축했으며, 각 모듈은 자체 requirements.txt를 가지고 로드됩니다. 서버를 재시작할 때마다 모든 모듈의 의존성을 다시 해결합니다. 마치 pip install을 반복해서 실행하는 것과 같습니다.

개발 중에 중간 규모 모듈 하나만 있어도, 아무것도 바뀌지 않아도 45초를 기다려야 했습니다.

  • 서버 재시작? 기다림.
  • 모듈 수정? 기다림.
  • 모듈 추가? 또 기다림.

그래서 chacc-dependency-manager를 만들었습니다. 작지만 똑똑한 한 가지 일을 합니다 :)

# pip-compile 결과를 캐시한다.
cache_key = hash(requirements + python_version + os)
if cache_key in cache:
    pinned = cache[cache_key]           # 저장된 답을 사용
else:
    pinned = run_pip_compile()          # 한 번만 해결 (느림)
    cache[cache_key] = pinned

# 실제로 누락된 패키지만 설치한다
install_missing_packages(pinned)
  • 추가적인 resolver 실행이 없습니다.
  • 불필요한 pip install 호출도 없습니다.
  • 계획을 기억해 두고 필요한 것만 수행합니다.

첫 실행(또는 requirements가 바뀐 경우): ~45초 (해결 + 설치)
캐시 히트(변경 없음): <2초 (해결 건너뛰고 누락된 패키지만 설치 – 보통 없음)

제 개발 워크플로에서는 의존성이 안정된 상태라면 매 재시작마다 발생하던 45초 대기가 사라졌습니다.

하지만 현실적으로 requirements.txt를 자주 수정한다면 그때마다 비용을 지불하게 됩니다. 이 해킹은 의존성을 자주 바꾸지 않을 때, 바로 제 경우처럼, 빛을 발합니다.

  • 충돌 해결 – 여전히 pip-compile을 사용합니다.
  • 콜드 설치를 빠르게 – 첫 실행은 전체 비용이 듭니다.
  • 속도 대회에서 uv를 이긴다 – 새로 시작한다면 uv를 쓰세요. 더 빠르고 똑똑합니다.
  • 모듈 간 버전 충돌 경고 – 설치 시점에 여전히 표시됩니다.

특정 모듈러 워크플로를 위한 아주 작은 캐시 래퍼일 뿐입니다. 그게 전부입니다.

Standalone으로 사용하거나 ChaCC‑API(ENABLE_PLUGIN_DEPENDENCY_RESOLUTION 토글)와 함께 사용해 보세요. 작동 모습을 직접 확인할 수 있습니다.

🔗 GitHub

🔗 PyPI

당신만의 “그냥 캐시하고 싶다” 이야기는 무엇인가요?

#buildinpublic #pip

0 조회
Back to Blog

관련 글

더 보기 »