我正在尝试启动并运行 AWS Lambda Python(顺便说一句,Python 初学者),但在包含 MySQL 依赖项时遇到了一些问题。我正在尝试在我的 Mac 上按照 此处 的说明进行操作。
对于第 3 步,我在项目的根目录下执行命令时遇到了一些问题
sudo pip install MySQL-python -t /
错误:
异常:回溯(最近一次调用最后一次):文件“/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg/pip/basecommand.py”,第 122 行,主状态 = self .run(options, args) 文件“/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg/pip/commands/install.py”,第 311 行,运行 os.path。 join(options.target_dir, item) 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py”,第 292 行,移动引发错误,“目标路径 ‘%s ’ 已经存在” % real_dst 错误:目标路径 ‘/MySQL_python-1.2.5-py2.7.egg-info/MySQL_python-1.2.5-py2.7.egg-info’ 已经存在
我最终编写了以下 lambda 函数(在我的 Mac 上运行良好),它是:
import MySQLdb
def lambda_handler(event, context):
# Open database connection
db = MySQLdb.connect(...)
# prepare a cursor object using cursor() method
cursor = db.cursor()
sql = "SELECT * FROM Users"
try:
# Execute the SQL command
cursor.execute(sql)
# Fetch all the rows in a list of lists.
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# Now print fetched result
print ("lname=%s" %(lname))
except:
print "Error: unable to fecth data"
# disconnect from server
db.close()
我接下来要做的是转到 /Library/Python/2.7/site-packages 并复制我执行 sudo pip install MySQL-python(没有 -t /)时下载的 MySQLdb 文件夹/文件(我是确定我在这里做错了什么)到我的 lambda 项目,然后将内容与 lambda_function.py 一起压缩并上传到 AWS Lambda。
然后我得到:
无法导入模块“lambda_function”:没有名为 MySQLdb 的模块
感谢您的帮助和建议!
编辑
能够做到 make sudo pip install MySQL-python -t /pathToProject 工作(感谢评论中的帮助)但现在我在运行 lambda 函数时得到了这个:
无法导入模块“lambda_function”:/var/task/_mysql.so:无效的 ELF 标头
我知道如果我在 Linux 机器上工作,那么它应该可以正常工作(正如一些人所建议的),但我想知道我是否可以让它在 OS X 机器上工作。
原文由 Guy Daher 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于像 Lambda 这样的用例,使用像 PyMySQL 这样的纯 python 实现会更快乐。
它是遵循 Python 数据库 API 规范的 MySQLdb 的替代品。对于大多数事情,比如触发的 Lambda 事件,它会一样快。
我在生产中经常使用它并且效果很好。