无法导入模块“ lambda_function”:没有名为“ cx_Oracle”的模块

时间:2019-07-11 20:12:20

标签: python amazon-web-services aws-lambda

我正在尝试在Python中创建一个AWS Lambda函数以连接到Oracle数据库(目前仅是一个测试连接)。但是我没有成功完成流程。每当我看到此错误消息:


    {
      "errorMessage": "Unable to import module 'lambda_function': No module named 'cx_Oracle'",
      "errorType": "Runtime.ImportModuleError"
    }

我已经在Ubuntu WSL上创建了virtualenv,在lib文件夹上安装了Oracle InstantClient,在sites-package文件夹下通过pip安装了cx_oracle,并在同一文件夹中创建了lambda函数,压缩了所有内容,并在我的S3和投入运行。

有人可以帮助我吗?

我的代码:

    import cx_Oracle

    # Yeah, you need this
    with open('/tmp/HOSTALIASES', 'w') as f: f.write(f'{os.uname()[1]} localhost\n')

    # Oracle away!
    def lambda_handler(event, context):
        return str(
            cx_Oracle.connect(
                'username',
                'password',
                cx_Oracle.makedsn(
                    'rds.amazonaws.com', 1521, 'SOME_SID',
                )
            ).cursor().execute('SELECT 42 FROM DUAL').fetchone()
        )

我的网站-程序包文件夹: folder

**我的Lambda配置:** lambda

2 个答案:

答案 0 :(得分:2)

AWS Lambda与Amazon Linux一起运行,因此您需要兼容的cx_Oracle库,在这种情况下为manylinux.whl

只需下载所有文件,解压缩,然后将.so文件复制到您的 lib 文件夹中即可。

这样Lambda可以识别cx_Oracle。

文件夹结构应如下所示: structure

答案 1 :(得分:0)

对于python3.7,lambda中的其他路径使用PYTHONPATH环境变量,并将您的库保存在此文件夹中。

enter image description here

enter image description here

相关问题