FCo*_*ing 2 python python-2.7 aws-lambda
我正在尝试在 AWS Lambda 上执行一个 python 函数。在我的函数中,我试图导入 mysql.connector 模块。但是出现了一个错误:
errorMessage": "没有名为 'mysql.connector' 的模块"
我最初在我的 EC2 实例中编写了我的 python 代码。我使用 pip 在我的 python 文件目录中安装了 mysql-connector。
pip install mysql-connector -t /path/to/file/dir
Run Code Online (Sandbox Code Playgroud)
我上传了唯一文件的 zip 文件,而不是任何包含该文件的文件夹。
我一直用来将 Python 库部署到 lambda 的模式如下
首先,在打包 lambda 函数之前,将所有需求安装到$SOURCE_ROOT/lib文件夹中
pip install -r requirements.txt -t ./lib
Run Code Online (Sandbox Code Playgroud)
其次,在您的 lambda 入口点(即 lambda 处理程序)中 dd 自动导入此文件夹
import os
import sys
# if running in lambda
if 'LAMBDA_TASK_ROOT' in os.environ:
sys.path.append(f"{os.environ['LAMBDA_TASK_ROOT']}/lib")
# this will render all of your packages placed as subdirs available
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
Run Code Online (Sandbox Code Playgroud)
sys.path使用您自己的打包路径进行扩展对于此工作至关重要。
关于本机编译扩展的注意事项
请注意,如果您要打包任何本机编译的扩展,则它们的编译应在与 linux 兼容的 O/S 上完成,理想情况下是在从运行 Lambda 的 Amazon Linux AMI 创建的 EC2 实例上(当前amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2,但始终可以从亚马逊官方文档。根据我的经验,从官方 Docker python 容器构建的扩展在 lambda 上运行,无需在从 AMI 创建的实际 EC2 实例上编译,但不能保证官方文档声明
如果您在代码中使用任何本机二进制文件,请确保它们是在此环境中编译的。请注意,AWS Lambda 仅支持 64 位二进制文件。
MySQL 连接器
快速查看Python 的 MySQL 连接器给人的印象是默认包将使用本机 Python 实现,因此没有加载 C 扩展