我正在尝试使用Zappa项目将使用flask_restplus
和flask_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文件:
from startup import Startup
app = Startup.start_app()
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
会导致此错误?
答案 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
你应该很好。