如何清理Pip缓存指定库并解决哈希匹配报错问题
问题背景
我正在开发一个基于私有PyPi服务器的库,希望修改后无需更新版本号即可与其他Python模块测试。开发环境使用tox、pyproject.toml和setuptools构建。修改上游库后,我执行.tox/py38/bin/pip cache remove my_lib清理旧缓存,Pip显示移除19个文件,但重新运行tox时仍报错:
ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
更新说明:我的依赖在setup.cfg中指定,未设置哈希,无requirements文件。
我有以下问题:
- 如何仅清理Pip缓存中的单个库以避免重建时的报错?不想清空整个缓存。
- 是否可以强制Pip忽略哈希不匹配并拉取更新?
- 是否可以强制Pip对缓存中已存在的文件进行哈希校验?
解决方案
1. 精准清理单个库的Pip缓存
你之前的命令只清理了tox虚拟环境内的部分缓存,系统或用户级别的pip缓存可能还残留旧包。可以用以下两种方式彻底清理:
- 执行
.tox/py38/bin/pip cache remove my_lib --all,--all参数会移除该包所有版本的缓存文件,避免遗漏。 - 先通过
.tox/py38/bin/pip cache dir获取该环境的缓存路径,手动进入对应目录下的my_lib文件夹,删除所有相关文件,确保彻底清除旧包缓存。
2. 强制Pip忽略哈希不匹配并拉取更新
由于你未在依赖中设置哈希,报错大概率是pip复用了旧缓存的哈希校验结果。可以通过以下方式强制拉取最新包:
- 修改
tox.ini的[testenv]段,添加pip参数:
每次运行tox时,pip会跳过缓存,从私有PyPi重新拉取[testenv] pip_install_args = --no-cache-dir --force-reinstallmy_lib并强制重装。 - 临时单次运行:
tox -e py38 -- --no-cache-dir --force-reinstall
3. 强制Pip对缓存文件进行哈希校验
Pip默认会校验缓存包的哈希,但缓存元数据过期可能导致校验失效。可以通过以下方式强制校验:
- 安装时添加
--require-hashes参数,配合--no-cache-dir让pip重新下载并校验新包哈希:.tox/py38/bin/pip install my_lib --require-hashes --no-cache-dir - 升级pip到最新版本,修复旧版本可能存在的缓存校验逻辑问题:
.tox/py38/bin/pip install --upgrade pip
内容的提问来源于stack exchange,提问作者kellanburket
相关产品推荐
相关产品推荐

