如何在不使用 venv 的情况下在 Gitlab CI/CD 中缓存 python 依赖项?

Dav*_*ave 5 python pip gitlab-ci

我尝试在 .gitlab-ci.yml 文件中使用缓存,但时间只会增加(通过添加空行进行测试)。我想缓存我用 pip 安装的 python 包。这是我安装和使用这些包的阶段(其他阶段使用 Docker):

image: python:3.8-slim-buster

variables:
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"

cache:
  paths:
    - .cache/pip

stages:
  - lint
  - test
  - build
  - deploy

test-job:
  stage: test
  before_script:
    - apt-get update
    - apt-get install -y --no-install-recommends gcc
    - apt install -y default-libmysqlclient-dev
    - pip3 install -r requirements.txt
  script:
    - pytest tests/test.py
Run Code Online (Sandbox Code Playgroud)

运行此管道后,对于每个管道,管道时间都会增加。我按照 GitLab 文档中的这些步骤进行操作 - https://docs.gitlab.com/ee/ci/caching/#cache-python-dependency 虽然我没有使用 venv,因为它不需要它就可以工作。我仍然不确定为什么需要 PIP_CACHE_DIR 变量(如果不使用的话),但我遵循了文档。

缓存 python 依赖项的正确方法是什么?我不想使用 venv。

Ben*_*min 5

PIP_CACHE_DIR是一个 pip 功能,可用于设置缓存目录。

这个问题的第二个答案解释了这一点。

对此可能存在一些分歧,但我认为对于 pip 包或节点模块之类的东西,为每个管道重新下载它们会更快。

当 Gitlab 使用以下命令缓存包时

cache:
  paths:
    - .cache/pip
Run Code Online (Sandbox Code Playgroud)

Gitlab 创建的缓存被压缩并存储在某个地方(存储位置取决于运行器配置)。这需要压缩并上传缓存。然后,当创建另一个管道时,需要下载并解压缓存。如果使用缓存会减慢作业执行速度,那么删除缓存可能是有意义的。