Google App Engine SDK:配置不当:加载 MySQLdb 模块时出错:没有名为 _mysql 的模块
Google App Engine SDK: ImproperlyConfigured: Error loading MySQLdb module: No module named _mysql
我正在尝试 运行 我的 Django 应用程序 Google App Engine SDK(本地)在 virtualenv
中,MySQL
作为数据库。我的 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?
我的requirements.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/
的内容
我也在 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) 当我在虚拟环境中执行 pip freeze
时安装了 MySQL-python==1.2.5
。
2) MySQL
已安装并在我的本地计算机上完美运行。
3) 到目前为止,我已经浏览了大部分 Stack Overflow 的问题,其中 none 似乎有所帮助。
安装是根据 Google recommendations 设置的,没有明显的错误。该问题无法在外部环境中重现(类似的 Django 设置工作正常),所以我们找到了一个解决方法,请参见下面(设置 PYTHONPATH
)。
GAE 要求将第三方库安装到lib/
目录中,使其成为穷人的虚拟环境。然后通过在 appengine_config.py
.
中调用 vendor.add('lib')
将 lib/
添加到模块搜索路径
这在作者的设置中工作正常,因此 GAE 设法从 lib/django/
导入 Django。然后这个工作配置在导入 MySQLdb 时莫名其妙地失败了,它肯定安装在同一个 lib/
.
在调查过程中,我们检查了 PYTHONPATH
环境变量是否会影响任何东西的想法。它没有,但设置它解决了问题:
export PYTHONPATH=/Users/username/Repositories/projectname/lib/
注意:避免在类似 PATH 的环境变量中使用相对目录(./lib
在 Erik 的评论中),这会造成安全漏洞。
作为C扩展的MySQL-Python可能会失败(没有名为_mysql的模块)。
你可以尝试使用 pymysql 模块
我正在尝试 运行 我的 Django 应用程序 Google App Engine SDK(本地)在 virtualenv
中,MySQL
作为数据库。我的 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?
我的requirements.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/
的内容
我也在 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) 当我在虚拟环境中执行 pip freeze
时安装了 MySQL-python==1.2.5
。
2) MySQL
已安装并在我的本地计算机上完美运行。
3) 到目前为止,我已经浏览了大部分 Stack Overflow 的问题,其中 none 似乎有所帮助。
安装是根据 Google recommendations 设置的,没有明显的错误。该问题无法在外部环境中重现(类似的 Django 设置工作正常),所以我们找到了一个解决方法,请参见下面(设置 PYTHONPATH
)。
GAE 要求将第三方库安装到lib/
目录中,使其成为穷人的虚拟环境。然后通过在 appengine_config.py
.
vendor.add('lib')
将 lib/
添加到模块搜索路径
这在作者的设置中工作正常,因此 GAE 设法从 lib/django/
导入 Django。然后这个工作配置在导入 MySQLdb 时莫名其妙地失败了,它肯定安装在同一个 lib/
.
在调查过程中,我们检查了 PYTHONPATH
环境变量是否会影响任何东西的想法。它没有,但设置它解决了问题:
export PYTHONPATH=/Users/username/Repositories/projectname/lib/
注意:避免在类似 PATH 的环境变量中使用相对目录(./lib
在 Erik 的评论中),这会造成安全漏洞。
作为C扩展的MySQL-Python可能会失败(没有名为_mysql的模块)。 你可以尝试使用 pymysql 模块