Skip to content

In-use Packages Removed by uv cache prune When Using Symlinks #13270

@xyu

Description

@xyu

Summary

It appears the hash rather than package name change in #11738 introduced a bug in find_archive_references() and cache pruning now removes some libraries that are still in use. I created the following test file to demonstrate the issue:

#!/bin/bash
set -eu

VER="$1"

rm -rf "$VER"
uv venv "$VER"
cd "$VER"
source bin/activate

set -x

uv pip install "uv==$VER"
bin/uv --version

UV_LINK_MODE=symlink bin/uv pip install zstandard
symlinks lib/python3.*/site-packages/zstandard

bin/uv cache -v prune
symlinks lib/python3.*/site-packages/zstandard

When running this with ./uv-test.sh 0.6.4 I get the following output:

Using CPython 3.11.12 interpreter at: /opt/Python/bin/python3
Creating virtual environment at: 0.6.4
+ uv pip install uv==0.6.4
Using Python 3.11.12 environment at:
Resolved 1 package in 1.00s
Prepared 1 package in 8.45s
Installed 1 package in 2ms
 + uv==0.6.4
+ bin/uv --version
uv 0.6.4
+ bin/uv pip install zstandard
Using Python 3.11.12 environment at:
Resolved 1 package in 604ms
Prepared 1 package in 2.25s
Installed 1 package in 3ms
 + zstandard==0.23.0
+ symlinks lib/python3.11/site-packages/zstandard
other_fs: /home/remote-user/0.6.4/lib/python3.11/site-packages/zstandard/backend_c.cpython-311-aarch64-linux-gnu.so -> /home/remote-user/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs/zstandard/backend_c.cpython-311-aarch64-linux-gnu.so
other_fs: /home/remote-user/0.6.4/lib/python3.11/site-packages/zstandard/__init__.py -> /home/remote-user/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs/zstandard/__init__.py
other_fs: /home/remote-user/0.6.4/lib/python3.11/site-packages/zstandard/_cffi.cpython-311-aarch64-linux-gnu.so -> /home/remote-user/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs/zstandard/_cffi.cpython-311-aarch64-linux-gnu.so
other_fs: /home/remote-user/0.6.4/lib/python3.11/site-packages/zstandard/backend_cffi.py -> /home/remote-user/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs/zstandard/backend_cffi.py
other_fs: /home/remote-user/0.6.4/lib/python3.11/site-packages/zstandard/py.typed -> /home/remote-user/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs/zstandard/py.typed
other_fs: /home/remote-user/0.6.4/lib/python3.11/site-packages/zstandard/__init__.pyi -> /home/remote-user/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs/zstandard/__init__.pyi
+ bin/uv cache -v prune
DEBUG uv 0.6.4
Pruning cache at: /home/remote-user/.cache/uv
DEBUG Removing dangling cache bucket: /home/remote-user/.cache/uv/wheels-v4
DEBUG Removing dangling cache archive: /app/data/wyeast/caches/.cache/uv/archive-v0/VIcOQ_j9JoOfTDcJ0PkGp
DEBUG Removing dangling cache archive: /app/data/wyeast/caches/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs
Removed 26 files (52.5MiB)
+ symlinks lib/python3.11/site-packages/zstandard
dangling: /home/remote-user/0.6.4/lib/python3.11/site-packages/zstandard/backend_c.cpython-311-aarch64-linux-gnu.so -> /home/remote-user/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs/zstandard/backend_c.cpython-311-aarch64-linux-gnu.so
dangling: /home/remote-user/0.6.4/lib/python3.11/site-packages/zstandard/__init__.py -> /home/remote-user/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs/zstandard/__init__.py
dangling: /home/remote-user/0.6.4/lib/python3.11/site-packages/zstandard/_cffi.cpython-311-aarch64-linux-gnu.so -> /home/remote-user/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs/zstandard/_cffi.cpython-311-aarch64-linux-gnu.so
dangling: /home/remote-user/0.6.4/lib/python3.11/site-packages/zstandard/backend_cffi.py -> /home/remote-user/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs/zstandard/backend_cffi.py
dangling: /home/remote-user/0.6.4/lib/python3.11/site-packages/zstandard/py.typed -> /home/remote-user/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs/zstandard/py.typed
dangling: /home/remote-user/0.6.4/lib/python3.11/site-packages/zstandard/__init__.pyi -> /home/remote-user/.cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs/zstandard/__init__.pyi

So after installing zstandard then calling uv cache prune the archive dir .cache/uv/archive-v0/3XkaxKI_hOb98TWKNRvUs where that package gets installed gets removed thus leaving dangling symlinks in the package venv.

Compared to the previous version, 0.6.3 where the archive dir remains untouched after a cache prune:

Using CPython 3.11.12 interpreter at: /opt/Python/bin/python3
Creating virtual environment at: 0.6.3
+ uv pip install uv==0.6.3
Using Python 3.11.12 environment at:
Resolved 1 package in 1.46s
Prepared 1 package in 9.16s
Installed 1 package in 3ms
 + uv==0.6.3
+ bin/uv --version
uv 0.6.3
+ bin/uv pip install zstandard
Using Python 3.11.12 environment at:
Resolved 1 package in 982ms
Prepared 1 package in 2.88s
Installed 1 package in 2ms
 + zstandard==0.23.0
+ symlinks lib/python3.11/site-packages/zstandard
other_fs: /home/remote-user/0.6.3/lib/python3.11/site-packages/zstandard/backend_c.cpython-311-aarch64-linux-gnu.so -> /home/remote-user/.cache/uv/archive-v0/c8tiDgnJBm77dsv16VIVJ/zstandard/backend_c.cpython-311-aarch64-linux-gnu.so
other_fs: /home/remote-user/0.6.3/lib/python3.11/site-packages/zstandard/__init__.py -> /home/remote-user/.cache/uv/archive-v0/c8tiDgnJBm77dsv16VIVJ/zstandard/__init__.py
other_fs: /home/remote-user/0.6.3/lib/python3.11/site-packages/zstandard/_cffi.cpython-311-aarch64-linux-gnu.so -> /home/remote-user/.cache/uv/archive-v0/c8tiDgnJBm77dsv16VIVJ/zstandard/_cffi.cpython-311-aarch64-linux-gnu.so
other_fs: /home/remote-user/0.6.3/lib/python3.11/site-packages/zstandard/backend_cffi.py -> /home/remote-user/.cache/uv/archive-v0/c8tiDgnJBm77dsv16VIVJ/zstandard/backend_cffi.py
other_fs: /home/remote-user/0.6.3/lib/python3.11/site-packages/zstandard/py.typed -> /home/remote-user/.cache/uv/archive-v0/c8tiDgnJBm77dsv16VIVJ/zstandard/py.typed
other_fs: /home/remote-user/0.6.3/lib/python3.11/site-packages/zstandard/__init__.pyi -> /home/remote-user/.cache/uv/archive-v0/c8tiDgnJBm77dsv16VIVJ/zstandard/__init__.pyi
+ bin/uv cache -v prune
DEBUG uv 0.6.3
Pruning cache at: /home/remote-user/.cache/uv
DEBUG Removing dangling cache bucket: /home/remote-user/.cache/uv/wheels-v5
Removed 3 files (1.4KiB)
+ symlinks lib/python3.11/site-packages/zstandard
other_fs: /home/remote-user/0.6.3/lib/python3.11/site-packages/zstandard/backend_c.cpython-311-aarch64-linux-gnu.so -> /home/remote-user/.cache/uv/archive-v0/c8tiDgnJBm77dsv16VIVJ/zstandard/backend_c.cpython-311-aarch64-linux-gnu.so
other_fs: /home/remote-user/0.6.3/lib/python3.11/site-packages/zstandard/__init__.py -> /home/remote-user/.cache/uv/archive-v0/c8tiDgnJBm77dsv16VIVJ/zstandard/__init__.py
other_fs: /home/remote-user/0.6.3/lib/python3.11/site-packages/zstandard/_cffi.cpython-311-aarch64-linux-gnu.so -> /home/remote-user/.cache/uv/archive-v0/c8tiDgnJBm77dsv16VIVJ/zstandard/_cffi.cpython-311-aarch64-linux-gnu.so
other_fs: /home/remote-user/0.6.3/lib/python3.11/site-packages/zstandard/backend_cffi.py -> /home/remote-user/.cache/uv/archive-v0/c8tiDgnJBm77dsv16VIVJ/zstandard/backend_cffi.py
other_fs: /home/remote-user/0.6.3/lib/python3.11/site-packages/zstandard/py.typed -> /home/remote-user/.cache/uv/archive-v0/c8tiDgnJBm77dsv16VIVJ/zstandard/py.typed
other_fs: /home/remote-user/0.6.3/lib/python3.11/site-packages/zstandard/__init__.pyi -> /home/remote-user/.cache/uv/archive-v0/c8tiDgnJBm77dsv16VIVJ/zstandard/__init__.pyi

Platform

Debian 12, aarch64 and x86_64

Version

0.6.4+

Python version

3.11.12, 3.12.10, 3.13.3

Metadata

Metadata

Assignees

Labels

needs-mreNeeds more information for reproduction, see #9452

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions