Google App Engine SDK:配置不正确:加载MySQLdb模块时出错:没有名为_mysql

时间:2018-06-26 20:29:56

标签: python mysql google-app-engine virtualenv mysql-python

我尝试在virtualenv作为数据库的MySQL内的Google App Engine SDK上(本地)运行Django应用。我的requirements.txt文件中的所有内容都安装完美。当我启动Google App Engine SDK环境时,它引发了一个看起来很常见的令人讨厌的错误,但是Stack Overflow在Google App Engine SDK中还没有解决此问题的示例。

这是我项目根目录下的工作流程...

virtualenv venv && mkdir lib

source venv/bin/activate

pip install -r requirements.txt -t lib/ && pip install -r requirements.txt

当我运行以下命令来启动SDK时......

dev_appserver.py app.yaml

我的回溯中遇到以下错误...

File "/Users/username/Repositories/projectname/lib/django/db/utils.py", line 211, in __getitem__
backend = load_backend(db['ENGINE'])
File "/Users/username/Repositories/projectname/lib/django/db/utils.py", line 115, in load_backend
INFO     2018-06-26 20:09:30,812 module.py:846] default: "GET /_ah/start HTTP/1.1" 500 -
return import_module('%s.base' % backend_name)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/Users/username/Repositories/projectname/lib/django/db/backends/mysql/base.py", line 30, in <module>
'Did you install mysqlclient or MySQL-python?' % e
ImproperlyConfigured: Error loading MySQLdb module: No module named _mysql.
Did you install mysqlclient or MySQL-python?

我的要求。txt

Django==1.11.8
djangorestframework==3.8.2
facebook-sdk
oauth2client==2.0.1
google-api-python-client==1.6.2
facebookads==2.11.1
httplib2==0.10.3
enum==0.4.6
requests-toolbelt==0.8.0
google-cloud-storage==1.6.0
google-resumable-media==0.3.1
google-auth
requests==2.18.0
lxml==3.8.0
pycrypto==2.6.1
MySQL-python==1.2.5

lib/ 的内容 Contents of <code>lib/</code>

我也在我的app.yaml中调用MySQLdb ...

libraries:
- name: MySQLdb
  version: "latest"

appengine_config.py 的内容

# [START vendor]
from google.appengine.ext import vendor

vendor.add('lib')
# [END vendor]

有些东西我在调试时已从列表中选中...

1)在虚拟环境中执行MySQL-python==1.2.5时,将安装pip freeze

2)MySQL已安装并在我的本地计算机上完美运行。

3)到目前为止,我已经仔细研究了Stack Overflow的大部分问题,但似乎都没有帮助。

2 个答案:

答案 0 :(得分:3)

安装是根据Google recommendations进行的,没有任何可见的错误。该问题无法在外部环境上重现(类似的Django设置也可以正常工作),因此我们只是想出一种解决方法,请参见下面的问题(设置PYTHONPATH)。

GAE请求将第三方库安装到lib/目录中,使其成为穷人的虚拟环境。然后,通过在lib/中调用vendor.add('lib'),将appengine_config.py添加到模块搜索路径。

在作者的设置中可以正常工作,因此GAE设法从lib/django/导入Django。然后,此工作配置因导入MySQLdb而意外失败,该MySQLdb确实已安装到同一lib/中。

在调查过程中,我们检查了PYTHONPATH环境变量是否会影响任何事情的想法。它没有,但是设置它可以解决问题:

export PYTHONPATH=/Users/username/Repositories/projectname/lib/

注意:避免在类似PATH的环境变量(在Erik的评论中{./lib)中使用相对目录,这会造成安全漏洞。

答案 1 :(得分:0)

作为C扩展名的MySQL-Python可能会失败(没有名为_mysql的模块)。 您可以尝试使用 pymysql 模块