缺少模块:cryptography.hazmat.bindings._padding。

8

我使用 pip install cryptography -t . 在我的Windows命令提示符中安装了 cryptography,然后将其压缩并上传到AWS Lambda中,但无论何时在AWS Lambda中运行代码,都会出现以下错误:

No module named 'cryptography.hazmat.bindings._padding

请有人帮我解决这个错误。

我在Windows系统中使用Python 3.6。


你是否正在使用与AWS相同的Python版本进行安装? - Mrk Fldig
是的,我在本地和 AWS Lambda 中都使用 3.6 版本。 - Dhandapani Sudhakar
你看过这个带有依赖项的部分吗?我对Python不是很了解,只是随意猜测。https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html - Mrk Fldig
你的主要代码是否与 cryptography 文件夹在同一级目录下?例如,/path/to/main.py 与 /path/to/cryptography 是同级文件夹。 - Lamanus
4个回答

2

将加密软件包升级解决了我的问题。

pip3 install --upgrade cryptography

0

问题和可用解决方案:

简而言之:如果可能的话,你应该始终在运行时直接正确安装cryptography,而不是打包和部署;否则,需要手动为目标运行时构建它(包括所有系统外部依赖链接)。在本地系统上使用pip install cryptography -t安装,然后打包到目标系统可能会导致依赖问题。

cryptography依赖于许多非Python的外部模块和系统依赖、工具和二进制文件,这些必须被安装、兼容并在执行时(Lambda运行时)对运行环境可用才能正常工作。

当模块在本地安装后打包并部署到另一个运行时时,通常该运行时没有这些依赖项,或者存在不兼容的依赖项;这可能会导致问题。修复这个问题的最佳方法是直接在目标系统上通过pip install(先升级pip)安装cryptography(不要使用.zip文件进行部署)。pip install将正确安装所有兼容的依赖项。

在AWS Lambda的情况下,如果您无法直接在运行时访问pip install,您应该尝试使用相同的系统版本和相同的Python版本(可以使用EC2虚拟机)构建.zip包,以便最终导出的捆绑包与目标系统工具和依赖项兼容。
作为最后的办法,您需要按照说明从源代码构建自己的自定义安装,并正确安装和链接运行时使用的外部依赖项。请按照安装文档的说明进行操作链接到cryptography文档构建说明

0

我曾经遇到过类似的问题,后来发现是因为我创建 Lambda 函数的层时出了问题。

你上传的库的路径应该是 [root]/python/lib/python[version].[minor version]/site-packages

如果以其他方式上传,Lambda 就无法识别依赖项。

这对于 Python3.9 有效,在加密库的情况下,我上传的 Lambda 层的 zip 文件结构是 /python/lib/python3.9/site-packages/[cryptography dump]。

希望这可以帮到你。


0

升级到最新版本的

python -m pip install --upgrade setuptools

python -m pip install –-upgrade pip

python -m pip install –-upgrade cryptography

python -m pip install --upgrade cffi

验证部署程序并对所需包进行必要的更新


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接