【问题标题】:No module named _mysql - Google App Engine & Django没有名为 _mysql 的模块 - Google App Engine 和 Django
【发布时间】:2015-09-02 19:34:11
【问题描述】:

首先,我正在开发 Mac (Yosemite)

我使用 Google App Engine 创建了一个简单的 Django 项目。按照文档中的建议,我在生产环境中使用 Cloud SQL,在开发环境中使用 MySQL。该项目当然在我的开发机器上使用 virtualenv

我可以使用 Django 的内置 runserver 命令毫无问题地运行该项目,即使我将其部署到 GAE 也一切正常。

但是,如果我使用 GAE 启动器运行开发服务器,则每当我尝试加载页面时都会引发错误:

ImproperlyConfigured: Error loading MySQLdb module: No module named _mysql

我安装了与 GAE 相同版本的 MySQLdb。目前它的 1.2.4。 MySQLdb 可用于 GAE SDK,所以我不知道为什么它不能导入 _mysql。

【问题讨论】:

    标签: python mysql django google-app-engine


    【解决方案1】:

    我终于找到了解决方法。

    仅仅将 MySQLdb 添加到您的 GAE 库中是不够的。 MySQLdb 尝试导入 _mysql 这是一个 .so 或 .c 文件取决于您使用的 MySQLdb 版本。我想直接导入它们似乎无法正常工作。可能是因为它是一个低级 C 文件,并且正如文档中所述,GAE 不支持任何类型的 C 扩展。如果您知道更好的解释,请在评论部分与我们分享。

    解决办法:

    首先我必须重命名 _mysql.so。我的现在只是 mysql.so

    然后在同一目录下创建一个名为_mysql.py的文件,并将这段代码放入其中:

    def __bootstrap__():
       global __bootstrap__, __loader__, __file__
       import sys, pkg_resources, imp
       __file__ = pkg_resources.resource_filename(__name__,'mysql.so') #point to your renamed _mysql.so
       __loader__ = None; del __bootstrap__, __loader__
       imp.load_dynamic(__name__,__file__)
    __bootstrap__()
    

    GAE 现在应该正确导入 MySQLdb。

    【讨论】:

    • 无需将_mysql.so重命名为mysql.so
    • 对我来说,它只有在将 _mysql.so 重命名为 mysql.so 后才有效
    猜你喜欢
    • 2018-12-05
    • 2016-03-20
    • 2015-04-24
    • 2018-08-05
    • 1970-01-01
    • 2020-01-18
    • 2013-03-06
    • 2021-07-05
    • 2015-01-25
    相关资源
    最近更新 更多