패키지 캐싱 자동화 스크립트
목적
- devpi 인덱스에 패키지 + 모든 의존성 wheel/sdist를 미리 캐시해두기 위함
- CI, 서버 초기화, 개발 환경을 폐쇄망으로 이전하기 전에 1회 실행하는 작업
기본 스크립트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| #!/usr/bin/env bash
set -e
DEVPI_INDEX="http://{HOST}:{PORT}/{user}/{index}/+simple"
PKG_LIST="pandas pydantic numpy scipy"
python -m venv .warmup-venv
source .warmup-venv/bin/activate
pip install -U pip
pip download \
--index-url "$DEVPI_INDEX" \
--dest ./wheelhouse \
$PKG_LIST
|
wheelhouse/에 모든 결과물 보존
- devpi 서버에 캐시
requirements 파일 사용시
1
2
3
4
5
| # requirements.txt
pandas
requests
pydantic
fastapi
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| #!/usr/bin/env bash
set -e
DEVPI_INDEX="http://{HOST}:{PORT}/{user}/{index}/+simple"
REQ_FILE="./requirements.txt"
python -m venv .warmup-venv
source .warmup-venv/bin/activate
pip install -U pip
pip download \
--index-url "$DEVPI_INDEX" \
--dest ./wheelhouse \
-r $REQ_FILE
|
파이썬 버전 및 플랫폼 고려
1
2
3
4
5
| # requirements.txt
pandas
requests
pydantic
fastapi
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| #!/usr/bin/env bash
set -e
DEVPI_INDEX="http://{HOST}:{PORT}/{user}/{index}/+simple"
DEST_DIR="./wheelhouse"
# 캐싱 대상 패키지 (버전 고정 권장)
REQ_FILE="./requirements.txt"
# Python 버전 (cp 태그 기준)
PY_VERSIONS=(39 310 313)
# 플랫폼 목록
PLATFORMS=(
"manylinux2014_x86_64"
"win_amd64"
"macosx_11_0_arm64"
)
python -m venv .warmup-venv
source .warmup-venv/bin/activate
pip install -U pip
mkdir -p "$DEST_DIR"
for PLATFORM in "${PLATFORMS[@]}"; do
for PY in "${PY_VERSIONS[@]}"; do
echo ">>> platform=${PLATFORM}, python=cp${PY}"
pip download \
--index-url "$DEVPI_INDEX" \
--platform "$PLATFORM" \
--python-version "$PY" \
--implementation cp \
--abi "cp${PY}" \
--only-binary=:all: \
--dest "$DEST_DIR" \
-r $REQ_FILE
done
done
|
캐싱 자동화 스크립트 사용
- 자동화 스크립트의 이름은
devpi-warm-up.sh 라고 가정한다.
- 아래 명령어들을 실행시킨 뒤, 패키지들이 성공적으로 모두 설치되는지 확인한다.
1
2
| chmod 755 devpi-warm-up.sh
./devpi-warm-up.sh
|
Comments