我正在尝试部署一个AWS Lambda包。该语言是Python3.6,它包括外部模块(flask-ask,从而间接地包含cryptography)。当我这样做并测试函数时,AWS报告了错误:
No module named 'cryptography.hazmat.bindings._openssl'我的开发环境是Windows 10,我的功能非常适合我的开发环境。我用Powershell脚本打包函数..。
& $pip install flask-ask -t $projectDir..。然后对结果和函数进行压缩,以生成zip包。我的Python3.6的开发版本有64位比特。
问题
为什么函数在本地工作,而在打包并发送到AWS时却不起作用?少了什么?我该怎么解决这个问题。
类似问题
我发现其他人也有类似的问题:
我不喜欢切换到Python2.7。第二个只有linux开发环境的解决方案。
发布于 2020-07-14 16:16:08
在AWS Lambda开发中,我们需要了解的一个关键问题是,运行时环境不依赖于语言,是一个精简的Amazon容器。具有本机依赖项(如cryptography )的Python代码利用了特定于操作系统和体系结构的二进制文件。
当您运行pip install cryptography时,它在本地机器的上下文中工作,这意味着任何依赖的二进制文件都将根据OS风格和CPU体系结构安装。您不能打包它们并在AWS环境中运行它们。
解决方案是要么使用工具从预先打包的发行版组装依赖项(Zappa这样做),要么执行在兼容环境中安装/编译依赖项的构建步骤(AWS SAM CLI这样做)。
我个人更喜欢AWS SAM CLI,但是YMMV。
https://stackoverflow.com/questions/48418424
复制相似问题