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

mar*_*cpt 1 python mysql django google-app-engine

首先,我正在使用Mac(Yosemite).

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

我可以使用Django内置的runserver命令运行该项目,没有任何问题,即使我将它部署到GAE,一切都很好.

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

ImproperlyConfigured: Error loading MySQLdb module: No module named _mysql
Run Code Online (Sandbox Code Playgroud)

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

mar*_*cpt 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__()
Run Code Online (Sandbox Code Playgroud)

GAE应该现在导入MySQLdb而不会出错.