首先,我在 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。
最佳答案
我终于找到了解决方法。
简单地将 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。
关于python - 没有名为 _mysql 的模块 - Google App Engine 和 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30893734/