PyPI のキャッシュサーバの devpi を使う

パッケージのインストールと devpi ユーザの作成

devpi ユーザを作り、ホームディレクトリ /home/devpi にサーバの設定やキャッシュを保存する。 root で作業する。

apt install -y python3-venv
useradd --system --create-home --home-dir /home/devpi --shell /usr/sbin/nologin devpi
mkdir -p ~devpi/{server,venv}
chown -R devpi:devpi ~devpi
sudo -u devpi python3 -m venv ~devpi/venv
sudo -u devpi ~devpi/venv/bin/pip install -U pip
sudo -u devpi ~devpi/venv/bin/pip install devpi-server devpi-web
sudo -u devpi ~devpi/venv/bin/devpi-init --serverdir ~devpi/server

サービスの登録

次のような /etc/systemd/system/devpi.service を作る。

[Unit]
Description=devpi (PyPI caching proxy)
After=network-online.target
Wants=network-online.target

[Service]
User=devpi
Group=devpi
WorkingDirectory=/home/devpi
ExecStart=/home/devpi/venv/bin/devpi-server --serverdir /home/devpi/server --host 0.0.0.0 --port 3141 --restrict-modify=root
Restart=on-failure

[Install]
WantedBy=multi-user.target

実行して、動作を確認する。

systemctl daemon-reload
systemctl enable --now devpi
systemctl status devpi --no-pager

キャッシュサーバを使う方法

キャッシュサーバを使う一般ユーザで pip の設定をする。 ここでは、localhost のポート 3141 で動作しているとする。

python -m pip config --user set global.index-url http://localhost:3141/root/pypi/+simple/
python -m pip config --user set global.trusted-host localhost

を実行すると ~/.config/pip/pip.conf に設定が加えられる。

uv pip でも上の設定を読み込むが、オプションを設定することもできる。

uv pip install --default-index http://devpi.local:3141/root/pypi/+simple/ --allow-insecure-host localhsot numpy

環境変数を設定する方法もある。

export UV_DEFAULT_INDEX=http://localhost:3141/root/pypi/+simple/
export UV_INSECURE_HOST=localhost

デフォルトのリポジトリを参照している uv.lock を変えずに実行するには –frozen を使って

uv run --frozen COMMAND

のようにする。一時的にデフォルトのリポジトリを使うには –default-index で指定すれば良い。

uv sync --default-index https://pypi.org/simple

参考

Tags of current page

,