【问题标题】:AWS Unable to import module 'app' : no module named PymysqlAWS 无法导入模块“app”:没有名为 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):

【问题讨论】:

    标签: python amazon-web-services import pymysql


    【解决方案1】:

    您必须在部署中打包所有项目依赖项。

    1. 从您的虚拟环境中将包 PyMysql 复制到 代码所在目录的根目录。

    2. 创建一个 zip,并将其上传到 lambda 函数

      docs

    【讨论】:

    • 谢谢。有效!现在我必须弄清楚为什么它在 pymysql.connect 上失败了。但这将是一个单独的问题;)
    【解决方案2】:
    1. mkdir pymysql-layer/
    2. cd pymysql-layer/
    3. 放入以下文件:

      • 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

    4. 然后运行:chmod +x get_layer_packages.sh

    5. 然后运行:./get_layer_packages.sh
    6. 最后,运行'zip -r mysql.zip .

    首选上传到 S3,然后在创建时将 s3:// path 导入 lambda 层

    【讨论】: