devpi server를 통한 패키지 설치 및 캐싱

사전 준비

실행 위치 참고

  • 🤖 : devpi 가 설치된 서버
  • 🧑‍💻 : 사용자. devpi 로 패키지 설치 요청을 보내는 클라이언트

사용할 devpi index 지정

  • 🧑‍💻 패키지를 캐시할 devpi server index 를 지정한다.
1
2
3
# 사용할 devpi index 지정
devpi use http://{HOST}:{PORT}
devpi use {user_name}/{index_name}

⭐️ 패키지 다운로드 및 캐싱 (중요)

  • 🧑‍💻 pip 사용시 꼭 --index-url 옵션을 사용해야 해당 인덱스에 패키지가 캐시된다.
  • pip download 를 사용하는 것을 권장하며, pip install 이나 devpi install 로 패키지를 설치해도 캐시는 된다.
  • pip download 를 권장하는 이유는 후술한다.
1
2
3
4
5
6
7
8
# 새로운 가상환경을 만들고 패키지 다운로드
python -m venv cache-packages
source cache-packages/bin/activate

# devpi install
pip download \
    --index-url http://{HOST}:{PORT}/{user}/{index}/+simple \
    pandas pydantic

인터넷 연결 해제

  • 🤖 테스트를 위해 devpi-server 가 위치한 서버의 default 게이트웨이를 제거한다.
1
2
3
sudo ip route del default
ping 8.8.8.8
# 출력 : ping: connect: Network is unreachable

새로운 가상환경에서 패키지 설치

  • 🧑‍💻 새로운 가상환경을 만들고, devpi-server 로부터 패키지를 설치해본다.
1
2
3
4
5
6
7
8
# 새로운 가상환경 생성
python -m venv local-test
local-test/bin/activate

# 패키지 설치 테스트
pip install \
    --index-url http://{HOST}:{PORT}/{user}/{index}/+simple \
    pandas


  • 🧑‍💻 설치가 완료됨
1
2
3
4
5
6
7
8
9
10
11
12
13
# 출력
--> .$ /usr/local/bin/pip --version 
--> .$ /usr/local/bin/pip install -U pandas ...
Looking in indexes: http://{HOST}:{PORT}/{user}/{index}
Collecting pandas
  Downloading http://{HOST}:{PORT}/root/pypi/...
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.9/10.9 MB 6.7 MB/s  0:00:01
Collecting numpy>=2.3.3 (from pandas)
  Downloading http://{HOST}:{PORT}/root/pypi/...
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.4/16.4 MB 6.1 MB/s  0:00:02
...
Installing collected packages: six, numpy, python-dateutil, pandas
Successfully installed numpy-2.4.1 pandas-3.0.0 ...

사용 테스트

  • 🧑‍💻 현재 가상환경(local-test) 에서 pandas 가 정상적으로 import 되는지 테스트
1
2
3
4
python
import pandas as pd
test_df = pd.DataFrame({"col1":[1, 2, 3], "col2":[4, 5, 6]})
print(test_df)
1
2
3
4
5
# 출력
   col1  col2
0     1     4
1     2     5
2     3     6

게이트웨이 라우터 복구

  • 🤖 제거했던 게이트웨이 라우터를 복구한다.
1
sudo ip route add default via {게이트웨이IP}

pip download 를 사용하는 이유

  • 설치 대상 패키지 + 모든 의존성이 함께 다운로드 되기 때문
항목 pip install pip download 비고
의존성 해결 ⭕ (설치 기준) ⭕ (다운로드 기준) 둘 다 똑같이 의존성을 계산
devpi 캐시 보장 ⚠️ 조건부(설치 시도 시) ✅ 확실 (요청 시) install--no-cache-dir 없으면 캐싱 건너뛸 위험
Wheel 파일 확보 ❌ (site-packages로 풀림) ✅ (지정한 폴더에 저장) 폐쇄망 이동 시 수동 백업용으로 download가 유리.
Warmup 🔺 보통 ✅ 권장 서버에 파일을 미리 채워넣는 용도로는 download가 정석.

devpi install

소개

  • devpi install : devpi 에서 제공하는 패키지 설치 명령어
  • pip install + --index-url 이 합쳐진 래퍼 명령어
  • --index-url 을 사전에 지정해둠으로써, 패키지 설치 명령어를 단축시키는 편의성 기능

예시

  • devpi install 을 사용하지 않는 경우
1
2
3
4
5
6
7
8
9
10
11
# 필요한 패키지 설치해둬야지
pip install --index-url http://{HOST}:{PORT}/{user}/{index}\
    pandas pydantic scikit-learn

# 아 맞다 까먹은 패키지가 있다.
pip install --index-url http://{HOST}:{PORT}/{user}/{index}\
    requests

# 아 또 까먹은 게 있네
pip install --index-url http://{HOST}:{PORT}/{user}/{index}\
    tensorflow


  • devpi install 을 사용하는 경우
1
2
3
4
5
6
7
8
9
10
devpi use http://{HOST}:{PORT}/{user}/{index}

# 필요한 패키지 설치해둬야지
devpi install pandas pydantic scikit-learn

# 아 맞다 까먹은 패키지가 있다.
devpi install requests

# 아 또 까먹은 게 있네
devpi install tensorflow

Reference

devpi-stable Documentation - devpi_packages

Comments