본문 바로가기
Data science

GitHub Actions 의존성 캐싱하기

by 연금(Pension)술사 2025. 1. 17.

GitHub Actions에서 Python 의존성 설치 시간을 단축하려면, 캐시(Cache)를 활용해서 이미 설치한 라이브러리를 재사용하도록 구성하는 방법이 가장 간단하고 효과적입니다. 특히 actions/cache를 이용해 pip가 내려받은 패키지를 캐싱해두면, 매번 새로 설치할 필요가 없어져 실행 시간이 크게 단축됩니다.

 

아래와 같이 케시 작업을 workflow내에 추가합니다.

  - name: Cache pip dependencies
    uses: actions/cache@v2
    with:
      path: ~/.cache/pip
      key: ${{ runner.os }}-pip-${{ hashFiles('requirements-dev.txt') }}
      restore-keys: |
        ${{ runner.os }}-pip-

 

설명하자면 아래와 같습니다.

  1. uses: actions/cache@v2: GitHub 마켓플레이스에서 공식 엑션을 쓰겠다는 것입니다. 버전은 v2입니다. 현재나와있는 버전은 v4까지지원된다고하며, 2025년 2월 1일내에 v4또는 v3로 버전업하라고 안내가 되어있내요.
  2. path: ~/.cache/pip: pip가 패키지를다운로드할 때 사용하는 캐시 디렉터리입니다. pip install이 실행되면 라이브러리를 먼저 '~/.cache/pip'에 설치를 진행합니다. 이 경로를 캐시해둠으로써, 다음 엑션시에 패키지 다운로드 과정을 스킵합니다.
  3. key: ${{ runner.os }}-pip-${{ hashFiles('requirements-dev.txt') }} : 캐시를 구분하기 위한 식별자입니다. runner.os은 (os별로 캐시를 구분하는 역할, 예, linux, Windows, macOS)에 해당합니다. 그리고 뒤에 hashFiles('requirements-dev.txt') 은 의존성 목록에 해당하는 'requirements-dev.txt'을 해시하여(checksum)하여 키에 추가합니다. 만일 'requirements-dev.txt'가 일부라도 바뀐다면 체크섬이 다르기에 새로운 캐시를 생성합니다.
  4. restore-keys: |: 키가 완전히 일치하지 않는 경우, 접두사(Prefix)와 일치하는 근접한 캐시를 살펴보기 위한 명령입니다. 딱히 필요없을 수 도 있습니다. 이 기능은 위의 key가 'Linux-pip-'라는 것으로 시작하기만해도 비슷한 내용으로 일부라도 캐시를 사용하겠다는 것입니다.

 

첫 적용시에는 아래와 같이 cache pip dependencies에 key을 조회하고 설치가 없다고 나옵니다.

같은 액션에서, 하단에 케시를 아래와 같이 저장합니다.

 

이후, 이 엑션이 다시 실행되면 아래와 같이 케시를 사용하는 것을 알 수 있습니다.

 

 

주의

* actions/cache 사용시 캐시 크기 제한이 약5GB가 있으므로, 너무 큰 라이브러리는 불가능할 수 있습니다.

 

반응형