尽管此源提供了有关 Azure 管道中缓存的大量信息,但尚不清楚如何为 Python 项目缓存 Python pip 包。
如果愿意在 Azure 管道构建上缓存 Pip 包,该如何进行?
根据this,可能以后会默认开启pip缓存。据我所知目前还不是这样。
要缓存标准 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"
我使用
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
我对官方文档中提到的标准 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"
Ted 的答案的简化版本,使用pip 的默认缓存目录:
- task: Cache@2
inputs:
key: 'pip | "$(Agent.OS)" | requirements.txt'
restoreKeys: |
pip | "$(Agent.OS)"
path: ~/.cache/pip
displayName: Cache pip