无法将flask_injector依赖项目部署到Lambda

时间:2019-10-19 20:17:33

标签: python aws-lambda zappa flask-injector

我正在尝试使用Zappa项目将使用flask_restplusflask_injector软件包的python项目部署到AWS Lambda,但是它不起作用,当我尝试时会抛出错误调用Zappa为项目自动创建的API网关:

  

[错误] AttributeError:类型对象'Callable'没有属性'_abc_registry'   追溯(最近一次通话):
    lambda_handler中的文件“ /var/task/handler.py”,第602行       返回LambdaHandler.lambda_handler(事件,上下文)
    lambda_handler中的文件“ /var/task/handler.py”,第245行       处理程序= cls()
     init 中的文件“ /var/task/handler.py”,第139行       self.app_module = importlib.import_module(self.settings.APP_MODULE)     在import_module中的文件“ /var/lang/lib/python3.7/importlib/init.py”,第127行       返回_bootstrap._gcd_import(名称[级别:],程序包,级别)
    _gcd_import
中的文件“”,第1006行     文件“”,第983行,位于_find_and_load
    _find_and_load_unlocked中的文件“”,行967,
    _load_unlocked中的文件“”,行677,
    exec_module中的文件“”,第728行,
    _call_with_frames_removed中的文件“”,第219行,
    文件“ /var/task/app.py”,第1行,在       从启动导入启动
    文件“ /var/task/startup.py”,第3行,在       从flask_injector导入FlaskInjector
    在第13行的文件“ /var/task/flask_injector.py”       输入import Any,Callable,cast,Dict,get_type_hints,Iterable,List,TypeVar,Union的方式
    文件“ /var/task/typing.py”,行1357,在       类Callable(extra = collections_abc.Callable,metaclass = CallableMeta):
    新建中的文件“ /var/task/typing.py”,第1005行       self._abc_registry = Extra._abc_registry

该项目仅包含两个Python文件:

  • app.py:
from startup import Startup

app = Startup.start_app()
  • startup.py:
from flask import Flask
from flask_restplus import Api
# if I removed the following line, the project works perfectly.
from flask_injector import FlaskInjector

class Startup():
    @staticmethod
    def start_app():
        appObj = Flask(__name__)
        appObj.secret_key = '123123'
        app = appObj

        print("It's working")

        return app

还有zappa_settings.json文件

{
    "dev": {
        "app_function": "app.app",
        "aws_region": "[My Region]",
        "profile_name": "default",
        "project_name": "my-api-test",
        "runtime": "python3.7",
        "s3_bucket": "[An S3 bucket name]",
        "keep_warm": false,
        "memory_size": 1024,
        "timeout_seconds": 90,
        "manage_roles": false,
        "role_name": "[A specific role name to deploy the project]",
        "role_arn": "[Role ARN]"
    }
}

我不知道这里是什么问题,为什么使用flask_injector会导致此错误?

1 个答案:

答案 0 :(得分:0)

在对该问题进行了更多调查后,阅读了亚马逊的答复:
https://forums.developer.amazon.com/questions/191460/ask-sdk-for-python-14-possible-issue-when-deployed.html

我发现我的一个依赖项安装了default-character-set = utf8mb4软件包(可以作为标准python软件包找到),并通过删除它解决了问题。

所以就做:

typing

你应该很好。