如何为GitHub Actions缓存poetry安装

28

我尝试使用 actions/cache@v2 来缓存 poetry venv。只安装了两个库 pylintpytest。看起来安装已经被缓存了(缓存大小约为26MB)。但是,在缓存命中后无法检索到它们。

运行时找不到缓存的安装库

poetry run pip list

Package    Version
---------- -------
pip        20.1.1
setuptools 41.2.0 

这里是运行记录。

YAML文件在此处

请问如何使用actions/cache@v2缓存poetry安装/虚拟环境以避免重新安装依赖项?

4个回答

37

@northtree回答是正确的,但对于任何浏览者,您应该知道,所引用的操作不再得到维护。

对于使用版本>=1.1.0的Poetry安装,我建议使用此片段来缓存您的Poetry依赖项:

...
- name: Install poetry
  uses: snok/install-poetry@v1.0.0
  with:
    virtualenvs-create: true
    virtualenvs-in-project: true
- name: Load cached venv
  id: cached-poetry-dependencies
  uses: actions/cache@v2
  with:
    path: .venv
    key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}
- name: Install dependencies
  run: poetry install
  if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
...

更完整的示例文档可以在这里找到 :)


谢谢你的工作。我已经改成接受你的答案了,请继续维护你的 GH actions :) - northtree

25

3
这是截至2022年5月的正确答案。 - dgellow
1
我正准备回答这个问题! - melMass
请注意:截至今天,即使在最新版本4.5.0中,使用“cache:'poetry'”也存在错误。 - Marcel Wilson

6
在您的YAML文件中,您正在使用dschep/install-poetry-action@v1.3来安装Poetry,这会设置poetry config virtualenvs.create false,这意味着当前的python解释器/虚拟环境将被使用。由于您没有在任何地方激活虚拟环境,因此Poetry只是使用系统Python,并且~/.poetry目录中没有虚拟环境。
如果您将poetry config virtualenvs.create true,例如:设置为true,它应该可以正常工作。
    - name: Install poetry
      uses: dschep/install-poetry-action@v1.3

    - name: Configure poetry
      run: |
        poetry config virtualenvs.create true
        poetry config virtualenvs.in-project false
        poetry config cache-dir ~/.poetry
        poetry config virtualenvs.path ~/.poetry/venv

注意:根据dschep/install-poetry-action文档,安装期间有一个选项可以设置poetry config virtualenvs.create true,但目前似乎存在问题(请参见https://github.com/dschep/install-poetry-action/issues/11)。无论如何,我个人更喜欢在与其他所有内容相同的配置块中完成此操作。


3
提醒一下,这些答案中提供的解决方案是正确的。但那个操作已不再维护。请查看 @Sondre 的答案获取最新的解决方案。 - Jarmos

3
你不需要使用外部方法来安装Poetry,也不需要设置虚拟环境。 poetry会将模块安装到~/.cache/pypoetry,因此:
    - name: Load cached venv
      id: cached-poetry-dependencies
      uses: actions/cache@v2
      with:
        path: |
          ~/.cache/pypoetry
          .venv
        key: poetry-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}

    - name: Install poetry no matter what
      run: |
        curl -sSL https://install.python-poetry.org | python3 -
        echo "$HOME/.local/bin" >> $GITHUB_PATH

    - name: Install requirements
      if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
      run: |
        poetry install

理论上来说,缓存poetry的安装也是可能的,它被安装到~/.poetry中。但我找不到方法。

然而,在您阅读此内容时,这个PR可能已经被合并,所以您只需要使用actions/setup-python即可缓存Poetry依赖项。


1
Poetry会被安装到$HOME/.local/bin,因此您可以缓存该路径并在后续运行中使用它。 - jidicula

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接