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

标签 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

我安装了与 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/

相关文章:

python - 记录器配置以记录到文件并打印到标准输出

javascript - Flask 中的多个 POST 请求

php - 如何运行查询应用长文本作为条件

java - 使用 maven JDBC mysql 找不到类

django - django 模板能否知道调用它的 View 是否具有 @login_required 装饰器?

javascript - TypeError : document. getElementById(...) 为空 Django + JS

python - 如何在 Windows 10 中安装 Django

Python动态类方法

python - 在 Python 中将列表的每个元素与另一个列表的每个元素相乘/相加/相除的有效方法

mysql - 为什么对 wp_postmeta 的引用这么慢?