缓存gitlab-ci的虚拟环境

时间:2018-01-31 10:47:43

标签: python-3.x caching pip 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

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"

2 个答案:

答案 0 :(得分:1)

我们成功使用了文档https://docs.gitlab.com/ee/ci/caching/#caching-python-dependencies

中概述的方法
# Change pip's cache directory to be inside the project directory since we can
# only cache local items.
variables:
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"

# Pip's cache doesn't store the python packages
# https://pip.pypa.io/en/stable/reference/pip_install/#caching
#
# If you want to also cache the installed packages, you have to install
# them in a virtualenv and cache it as well.
cache:
  paths:
    - .cache/pip
    - venv/

可能还缺少其他东西,但您的第一遍可能会丢失:

  • 在减小整个.../venv/目录树的大小时,您可能需要.../venv/bin,因为这是找到正确的python版本所必需的;使用命令activate venv which -a python3
  • 后在本地查看
  • 如果将再次使用pip(例如,稍后通过某些制作配方在构建中使用),则需要如上所述移动pip缓存。

答案 1 :(得分:0)

在内部版本之间重用pip缓存是一个很好的主意,但对virtualenvs进行相同的操作是一个糟糕的主意。

这是因为virtualenv容易以在运行时无法真正检测到的方式被弄乱。这种情况不仅发生,而且发生的频率超出您的想象,因此请避免。

PS。向学习过困难方法的人提供建议。