AWS 无法导入模块“app”:没有名为 Pymysql 的模块
Posted
技术标签:
【中文标题】AWS 无法导入模块“app”:没有名为 Pymysql 的模块【英文标题】:AWS Unable to import module 'app' : no module named Pymysql 【发布时间】:2016-12-09 19:47:22 【问题描述】:我正在使用 AWS 控制台并尝试使用 Lambda 函数将数据添加到 mysql 表。每当我尝试测试该功能时,都会收到以下错误:
无法导入模块“app”:没有名为 pymysql 的模块
它的行为就像 pymysql 不在路径中。我进入 microEC2 实例并 pip'ed pymysql。但它仍然不起作用。我尝试将我的代码压缩到一个文件中并上传,并将代码复制并粘贴到控制台中并运行它。两者都不起作用。任何帮助将不胜感激。
这是一个代码sn-p:
import sys
import logging
import pymysql
def main(event, context):
【问题讨论】:
【参考方案1】:您必须在部署中打包所有项目依赖项。
从您的虚拟环境中将包 PyMysql 复制到 代码所在目录的根目录。
创建一个 zip,并将其上传到 lambda 函数
见docs
【讨论】:
谢谢。有效!现在我必须弄清楚为什么它在 pymysql.connect 上失败了。但这将是一个单独的问题;)【参考方案2】:mkdir pymysql-layer/
cd pymysql-layer/
放入以下文件:
get_layer_packages.sh导出 PKG_DIR="python"
rm -rf $PKG_DIR && mkdir -p $PKG_DIR
docker run --rm -v $(pwd):/foo -w /foo lambci/lambda:build-python3.6 \ pip install -r requirements.txt --no-deps -t $PKG_DIR
requirements.txtpymysql
sqlalchemy
然后运行:chmod +x get_layer_packages.sh
./get_layer_packages.sh
最后,运行'zip -r mysql.zip .
首选上传到 S3,然后在创建时将 s3:// path
导入 lambda 层
【讨论】:
以上是关于AWS 无法导入模块“app”:没有名为 Pymysql 的模块的主要内容,如果未能解决你的问题,请参考以下文章
aws lambda 无法导入模块“lambda_function”:没有名为“requests”的模块
AWS Lambda python 错误:Runtime.ImportModuleError:无法导入模块“app”:无法从“pyparsing”导入名称“operatorPrecedence”
从 aws-lambda 导入 pysftp 时如何修复导入错误“没有名为 '_cffi_backend' 的模块”
如何从 aws lambda 中的 git 子模块导入代码?
ImportError:没有名为 pydot 的模块(无法导入 pydot)
ImportError:无法导入设置(是不是在 sys.path 上?设置文件中是不是存在导入错误?):没有名为 setting 的模块