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