CI流程中Pipenv缓存持续增大问题及解决方案咨询
问题原因分析
- 隐式触发lock操作:CI中执行
pipenv install --deploy时,若环境缺少匹配的Pipfile.lock文件,pipenv会自动执行lock生成新文件。而pipenv lock会下载PyPI包的元数据(版本、依赖信息等),这些数据会分别存入pip的HTTP缓存(默认路径/Library/Caches/pip/http)和你指定的PIPENV_CACHE_DIR目录,导致缓存体积持续增长。 - 缓存无自动清理机制:pipenv和pip的缓存默认不会自动删除旧条目,重复执行操作时,新缓存文件会直接追加到目录中,不会覆盖或清理旧内容,因此每次运行都会增加相近大小的缓存。
- --clear选项不作用于缓存:
pipenv install --clear仅负责清理虚拟环境中的旧包,并不涉及pipenv或pip的缓存目录,所以添加该选项对缓存体积无影响。
解决办法
- 提前提交Pipfile.lock到代码仓库:在本地完成
pipenv lock操作,将生成的Pipfile.lock提交至代码仓库,CI直接使用该文件。此时pipenv install --deploy会跳过lock步骤,不会生成新缓存。 - 统一缓存路径并提前清空:
- 将pip的缓存目录整合到
PIPENV_CACHE_DIR下,避免缓存分散:export PIPENV_CACHE_DIR=$env.WORKSPACE/.pipenv-cache export PIP_CACHE_DIR=$PIPENV_CACHE_DIR/pip-cache - 执行
pipenv install前清空缓存目录,确保每次生成的缓存为全新内容,不会累加旧文件:rm -rf $PIPENV_CACHE_DIR && mkdir -p $PIPENV_CACHE_DIR
- 将pip的缓存目录整合到
- 移除CI中的lock步骤:检查CI流程,若存在手动执行
pipenv lock的步骤,直接删除——所有lock操作在本地完成即可。 - 安装后清理冗余缓存:若需保留缓存,可在安装完成后执行
pip cache purge清理pip的HTTP缓存,仅保留pipenv必要的缓存文件。
内容的提问来源于stack exchange,提问作者Valeriya Ermilova
相关产品推荐
相关产品推荐

