【问题标题】:Download dependencies using serverless-python-requirements plugin on GitHub Actions throws "cannot find Python 3.7"使用 GitHub Actions 上的 serverless-python-requirements 插件下载依赖项抛出“找不到 Python 3.7”
【发布时间】:2021-01-26 23:51:59
【问题描述】:

这是我的工作流程:deploy.yml

on:
  push:
    branches: [develop, main]
env:
  name: project-name
  region: my-region
jobs:
  env:
    name: Load environment vars from .env files
    runs-on: ubuntu-latest
    steps:
      <omitted>
  deploy:
    name: Deploy|${{needs.env.outputs.environment}}
    needs: env
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Configure AWS Credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{secrets.AWS_ACCESS_KEY_ID}}
          aws-secret-access-key: ${{secrets.AWS_SECRET_ACCESS_KEY}}
          aws-region: ${{needs.env.outputs.region}}
      - name: Setup python
        uses: actions/setup-python@v2
        with:
          python-version: '3.7.7'
      - name: Installs Serverless plugins and Deploy
        uses: serverless/github-action@v1.53.0
        with:
          args: -c "serverless plugin install --name serverless-python-requirements && serverless deploy --verbose"
          entrypoint: /bin/bash
        env:
          SLS_DEBUG: '*'
          AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_ID}}
          AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY}}
          environment: ${{needs.env.outputs.environment}}

这是我的 serverless.yml:

service: my-service

provider:
  name: aws
  runtime: python3.7

package:
  individually: True

plugins:
  - serverless-python-requirements

custom:
  pythonRequirements:
    dockerizePip: false

functions:
  etl:
    name: ${env:environment}-etl-lambda
    handler: etl/lambda_functions/etl_lambda_function.lambda_handler
    module: etl/lambda_functions
    package:
      include:
        - ./etl

项目结构:

etl/
    lambda_functions/
        etl_lambda_function.py
        requirements.txt

每当动作运行时,我都会得到Error: python3.7 not found! Try the pythonBin option.

所以我更新了我的 serverless.yml 以引用 opt/ 目录中的 python 安装(阅读更多关于 here 的信息):

custom:
  pythonRequirements:
    dockerizePip: false
    pythonBin: /opt/hostedtoolcache/Python/bin/python3.7

但现在我得到Error: /opt/hostedtoolcache/Python/bin/python3.7 not found! Try the pythonBin option.

我不确定如何引用 actions/setup-python@v2 安装 Python 的位置,并在 serverless-python-requests 中引用它

我已经看到一些关于无服务器 python 请求的 SO 的其他问题,但没有提到在 GitHub 操作上运行时的问题。

我也尝试设置dockerizePip: true,但出现Errorr: cannot find docker 错误。

非常感谢任何反馈!

【问题讨论】:

  • 尝试将python-version: '3.7.7' 替换为python-version: 3.7。从版本中删除引号。在 serverless.yaml 中,仅尝试使用 runtime: python3runtime: python,并且在 pythonBin 中相同。如果可能的话,也添加您的 gh 操作构建链接。
  • pythonpython3 尝试了pythonBin 并得到了相同的结果。还尝试更改python-version,但这没有任何区别。我不认为python-version 是问题,因为“设置python”步骤完成时没有错误。我认为这与 python 可执行文件的存储位置有关。我也试过这条路:/opt/hostedtoolcache/Python/3.7.7/x64/bin/python3.7 无济于事。这是一个私人仓库,所以我不能分享构建链接。
  • 您的 docker 容器可能有错误,而不是 yml 文件。或者在 Dockerfile 中与您的 yml 断开连接。 Dockerfile 应该有类似RUN apt-get -qq upgrade -y python3.7 的东西,这是针对 Ubuntu 的。如果您是第一次尝试设置 - 您可能会缺少一些环境设置。
  • @user923227 这是有道理的!当我将上述命令作为 arg 添加到我的 deploy.yml 中时,我收到错误 E: Unable to locate package python3.7,但我认为这是正确的想法。我会继续朝着这个方向努力。
  • 我会更新评论作为答案。

标签: python amazon-web-services aws-lambda serverless-framework github-actions


【解决方案1】:

您的 docker 容器可能存在错误,而不是 yml 文件。或者在 Dockerfile 中与您的 yml 断开连接。

Dockerfile 应该有类似的东西

RUN apt-get -qq upgrade -y python3.7 

这是针对 Ubuntu 的。如果您是第一次尝试设置,您可能会缺少一些环境设置。

【讨论】:

    猜你喜欢
    • 2022-11-04
    • 2021-10-24
    • 2019-07-14
    • 2021-11-18
    • 1970-01-01
    • 2020-06-02
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多