缓存gitlab-ci的虚拟环境

blp*_*asd 8 caching pip python-3.x conda gitlab-ci

我使用Gitlab CI脚本缓存了Pip包,所以这不是问题.

现在我也想要捕获Conda虚拟环境,因为它减少了设置环境的时间.

我缓存了一个虚拟环境.不幸的是,最后需要很长时间才能缓存所有的venv文件.

我试图只缓存$CI_PROJECT_DIR/myenv/lib/python3.6/site-packages文件夹,它似乎减少了管道的运行时间.

我的问题是:我做得对吗?

脚本如下:

gitlab-ci.yml

image: continuumio/miniconda3:latest

cache:
  paths:
    - .pip
    - ls -l $CI_PROJECT_DIR/myvenv/lib/python3.6/site-packages
    - $CI_PROJECT_DIR/myvenv/lib/python3.6/site-packages

before_script:
  - chmod +x gitlab-ci.sh
  - ./gitlab-ci.sh

stages:
  - test

test:
  stage: test
  script:
    - python eval.py
Run Code Online (Sandbox Code Playgroud)

gitlab-ci.sh

#!/usr/bin/env bash
ENV_NAME=myenv
ENV_REQUIREMENTS=requirements.txt

if [ ! -d $ENV_NAME ]; then
    echo "Environment $ENV_NAME does not exist. Creating it now!"
    conda create --path --prefix "$CI_PROJECT_DIR/$ENV_NAME"
fi

echo "Activating environment: $CI_PROJECT_DIR/$ENV_NAME"
source activate "$CI_PROJECT_DIR/$ENV_NAME"

echo "Installing PIP"
conda install -y pip

echo "PIP: installing required packages"
echo `which pip`
pip --cache-dir=.pip install -r "$ENV_REQUIREMENTS"
Run Code Online (Sandbox Code Playgroud)

sor*_*rin 6

在构建之间重用 pip 缓存是一个很好的主意,但对 virtualenvs 做同样的事情是一个非常糟糕的主意。

这是因为 virtualenv 很容易以一种您在运行时无法真正检测到的方式变得混乱。这不仅会发生,而且发生的频率比您想象的要高,因此请避免它。

附注。向那些以艰难的方式学习的人提供建议。