Python 3.x 使用Python 3.6和加密模块部署AWS Lambda包
我正在尝试部署AWS Lambda包。该语言是Python 3.6,它包括外部模块(Python 3.x 使用Python 3.6和加密模块部署AWS Lambda包,python-3.x,amazon-web-services,lambda,Python 3.x,Amazon Web Services,Lambda,我正在尝试部署AWS Lambda包。该语言是Python 3.6,它包括外部模块(ask,从而间接地cryptography)。当我这样做并测试功能时,AWS报告错误: No module named 'cryptography.hazmat.bindings._openssl' 我的开发环境是Windows10。我的函数在我的开发环境中运行得非常好。我用Powershell脚本打包函数 & $pip install flask-ask -t $projectDir 。。。然后压缩
ask
,从而间接地cryptography
)。当我这样做并测试功能时,AWS报告错误:
No module named 'cryptography.hazmat.bindings._openssl'
我的开发环境是Windows10。我的函数在我的开发环境中运行得非常好。我用Powershell脚本打包函数
& $pip install flask-ask -t $projectDir
。。。然后压缩结果和函数以生成压缩包。我的Python 3.6开发版本具有64位位
问题
为什么该函数在本地工作,但在打包并发送到AWS时却不能工作?
少了什么?我该如何修复它
类似问题
我发现其他人也有类似的问题:
我讨厌切换到Python 2.7。第二个解决方案只针对linux开发环境。后面的答案,但在AWS Lambda开发中需要了解的一个关键问题是,独立于语言的运行时环境是一个精简的Amazon linux容器。具有本机依赖项的Python代码,如
加密
,使用特定于操作系统和体系结构的二进制文件
当您运行pip install cryptography
时,它在本地机器的上下文中工作,这意味着将根据操作系统风格和CPU体系结构安装任何依赖的二进制文件。您不能打包这些文件并在AWS Lambda环境中运行它们
解决方案是使用从预打包发行版组装依赖项的工具(Zappa执行此操作),或执行在兼容环境中安装/编译依赖项的构建步骤(AWS SAM CLI执行此操作)
我个人更喜欢AWS SAM CLI,但YMMV。您解决过这个问题吗?在测试我的lambda时,我无法加载加密本机库。克里斯,解决方案是使用PythonCan,你能澄清吗?你的意思是说你回到了Python2.7吗?如果是这样的话,您是如何解决pyOpenSSL库和2.7中的其他不兼容问题的?