Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用Python 3.6和加密模块部署AWS Lambda包_Python 3.x_Amazon Web Services_Lambda - Fatal编程技术网

Python 3.x 使用Python 3.6和加密模块部署AWS Lambda包

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 。。。然后压缩

我正在尝试部署AWS Lambda包。该语言是Python 3.6,它包括外部模块(
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中的其他不兼容问题的?