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.txt

    pymysql

    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 的模块