如何在 Azure Pipelines 中缓存 pip 包

问题描述 投票:0回答:4

尽管此源提供了有关 Azure 管道中缓存的大量信息,但尚不清楚如何为 Python 项目缓存 Python pip 包。

如果愿意在 Azure 管道构建上缓存 Pip 包,该如何进行?

根据this,可能以后会默认开启pip缓存。据我所知目前还不是这样。

python caching pip azure-pipelines
4个回答
7
投票

要缓存标准 pip 安装,请使用以下命令:

variables:
  # variables are automatically exported as environment variables
  # so this will override pip's default cache dir
  - name: pip_cache_dir
    value: $(Pipeline.Workspace)/.pip

steps:
  - task: Cache@2
    inputs:
      key: 'pip | "$(Agent.OS)" | requirements.txt'
      restoreKeys: |
        pip | "$(Agent.OS)"
      path: $(pip_cache_dir)
    displayName: Cache pip

  - script: |
      pip install -r requirements.txt
     displayName: "pip install"

5
投票

我使用

pre-commit
文档作为灵感:

并使用 Anaconda 配置以下 Python 管道:

pool:
  vmImage: 'ubuntu-latest'

variables:
  CONDA_ENV: foobar-env
  CONDA_HOME: /usr/share/miniconda/envs/$(CONDA_ENV)/

steps:
- script: echo "##vso[task.prependpath]$CONDA/bin"
  displayName: Add conda to PATH

- task: Cache@2
  displayName: Use cached Anaconda environment
  inputs:
    key: conda | environment.yml
    path: $(CONDA_HOME)
    cacheHitVar: CONDA_CACHE_RESTORED

- script: conda env create --file environment.yml
  displayName: Create Anaconda environment (if not restored from cache)
  condition: eq(variables.CONDA_CACHE_RESTORED, 'false')

- script: |
    source activate $(CONDA_ENV)
    pytest
  displayName: Run unit tests

2
投票

我对官方文档中提到的标准 pip 缓存实现不太满意。您基本上总是正常安装依赖项,这意味着 pip 将执行大量耗时的检查。 Pip 最终会找到缓存的构建(*.whl、*.tar.gz),但这一切都需要时间。您可以选择使用

venv
conda
来代替,但对我来说,这会导致出现意外行为的错误情况。我最终所做的是分别使用
pip download
pip install

variables:
  pipDownloadDir: $(Pipeline.Workspace)/.pip

steps:
- task: Cache@2
  displayName: Load cache
  inputs:
    key: 'pip | "$(Agent.OS)" | requirements.txt'
    path: $(pipDownloadDir)
    cacheHitVar: cacheRestored

- script: pip download -r requirements.txt --dest=$(pipDownloadDir)
  displayName: "Download requirements"
  condition: eq(variables.cacheRestored, 'false')

- script: pip install -r requirements.txt --no-index --find-links=$(pipDownloadDir)
  displayName: "Install requirements"

0
投票

Ted 的答案的简化版本,使用pip 的默认缓存目录

- task: Cache@2
  inputs:
    key: 'pip | "$(Agent.OS)" | requirements.txt'
    restoreKeys: |
      pip | "$(Agent.OS)"
    path: ~/.cache/pip
  displayName: Cache pip
© www.soinside.com 2019 - 2024. All rights reserved.