我创建了一个lambda函数,该函数将数据上传到雪花。我在文件夹中安装了所有要求,并与主要的python文件一起压缩。在AWS中运行时会显示错误:
未找到模块。密码学.hamtaz.bindings._constant_time。
但是我在指定路径上有此模块。我不知道为什么它显示错误。我不知道为什么会出现错误。
代码如下:
main(event, context):
import snowflake.connector
cnx = snowflake.connector.connect( user='xxx', password='yyyyy', account='zzzz', database="db Name", schema = "schema Name" )
try:
query = "SELECT * FROM Table_Name"
cnx.cursor().execute(query)
finally:
cnx.close()
答案 0 :(得分:2)
我最近遇到了同样的问题。事实证明,我的Lambda函数运行时是Python 3.8,但“ cffi”库已针对Python 3.6进行了编译。我用Python 3.6运行时创建了一个新的Lambda函数,并将其部署包上传到该函数,它立即开始工作。
答案 1 :(得分:1)
我需要为我的lambda软件包设置一个virtualenv才能正常工作。我还发现pip install雪花连接器python没有安装一些加密库,尽管如果我导航到我希望将它们放入的目录,则添加--target。确实导致了这些库的安装。
答案 2 :(得分:1)
我最近遇到了同样的问题,发现这是Windows环境的问题,尝试创建linux环境,安装Python,软件包,使用所有库压缩您的代码,然后将其放回AWS lambda,希望它可以工作。
答案 3 :(得分:0)
对于python 3.6,当我在AWS Lambda函数中遇到错误"Unable to import module 'main': No module named '_cffi_backend'"
时,我能够在linux docker image的virtualenv中运行mv _cffi_backend.cpython-36m-x86_64-linux-gnu.so _cffi_backend.so
,问题是解决。像上面提到的,某些依赖关系最好用--target放置,以便将它们放在需要的地方