在 AWS 上部署无服务器 Flask 应用程序时出错,没有名为“werkzeug._compat”的模块

sdu*_*gan 12 python werkzeug flask aws-lambda serverless-framework

我创建了一个简单的 Flask 应用程序并成功将其部署到 AWS Lambda。我正在遵循本教程的第一步。

运行Lambda时,日志中出现以下错误:

Unable to import module 'wsgi_handler': No module named 'werkzeug._compat'
Run Code Online (Sandbox Code Playgroud)

我已经安装了 serverless-python-requirements 和 serverless-wsgi。这些文件夹位于上传到 AWS 的 zip 文件夹中。

我在 serverless_wsgi.py 中找到了对 werkzeug._compat 的引用:

from werkzeug._compat import BytesIO, string_types, to_bytes, wsgi_encoding_dance
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法在可能找到此函数的 Werkzeug 文件夹中的任何位置找到“_compat”。我是否缺少包裹或其他东西?

这是我的 serverless.yml:

# serverless.yml

service: serverless-flask

plugins:
  - serverless-python-requirements
  - serverless-wsgi

custom:
  wsgi:
    app: app.app
    packRequirements: false
  pythonRequirements:
    dockerizePip: non-linux

provider:
  name: aws
  runtime: python3.6
  stage: dev
  region: us-east-1

functions:
  app:
    handler: wsgi_handler.handler
    events:
      - http: ANY /
      - http: 'ANY {proxy+}'
Run Code Online (Sandbox Code Playgroud)

还有我的requirements.txt:

click==8.0.0
dataclasses==0.8
Flask==2.0.0
itsdangerous==2.0.0
Jinja2==3.0.0
MarkupSafe==2.0.0
Werkzeug==2.0.0
Run Code Online (Sandbox Code Playgroud)

All*_*ain 21

Flask、Werkzeug 和其他托盘项目刚刚进行了重大更新,放弃了对 python2 的支持并删除了_compat模块。而且 AWS 还没有解决能力问题。

最简单的修复方法是将 Flask、Werkzeug 等降级到以前的主要版本。

  • 这节省了我们几个小时!我们降级到“Flask 1.1.4”并解决了该问题。干杯! (7认同)
  • 对于其他面临此问题的人,我还必须降级到“Werkzeug==1.0.1”才能使其正常工作。 (7认同)