没有名为_mysql的模块-Google App Engine和Django

发布于 2021-01-29 15:02:10

首先,我正在 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。

关注者
0
被浏览
109
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我终于找到了解决方法。

    仅仅将 MySQLdb 添加到您的 GAE 库是不够的。MySQLdb尝试导入 _mysql
    (.so或.c文件),具体取决于您使用的MySQLdb版本。我想似乎直接导入它们无法正常工作。可能是因为它是一个低级C文件,并且正如docs
    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,而不会出现错误。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看