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

时间:2015-06-17 13:55:18

标签: python mysql django google-app-engine

首先,我正在 Mac(约塞米蒂)上工作。

我使用 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。

1 个答案:

答案 0 :(得分:6)

我终于找到了解决方法。

仅将 MySQLdb 添加到 GAE lib是不够的。 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。