我试图运行我的django应用程序在谷歌应用程序引擎sdk(本地)内 virtualenv
与 MySQL
作为数据库。我的一切 requirements.txt
文件安装得很好。当我启动googleappenginesdk环境时,它抛出了一个看起来很常见的严重错误,但是stack overflow在googleappenginesdk中还没有任何解决这个问题的例子。
这是我的工作流程从我的项目根目录。。。 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/
我正在我的app.yaml中调用mysqldb。。。
libraries:
- name: MySQLdb
version: "latest"
appengine\u config.py的内容
# [START vendor]
from google.appengine.ext import vendor
vendor.add('lib')
# [END vendor]
我在调试时从列表中删除了一些东西。。。
MySQL-python==1.2.5
当我执行pip freeze
在我的虚拟环境中。MySQL
已安装并在本地计算机上运行良好。
3) 到目前为止,我已经浏览了stack overflow的问题列表,但似乎没有一个有用。
2条答案
按热度按时间a1o7rhls1#
安装是根据google的建议进行的,没有明显的错误。这个问题无法在外部环境中重现(类似的django设置工作得很好),所以我们来解决这个问题,请参见下面的(set)
PYTHONPATH
).gae请求将第三方库安装到
lib/
目录,使之成为穷人的虚拟环境。那么lib/
正在通过调用添加到模块搜索路径vendor.add('lib')
在appengine_config.py
.这在作者的设置中工作正常,因此gae成功地从中导入了django
lib/django/
. 然后这个工作配置错误地导入mysqldb失败,mysqldb肯定安装到了同一个数据库中lib/
.在调查过程中,我们检查了
PYTHONPATH
环境变量可以影响任何东西。它没有,但设置它解决了这个问题:注意:避免在类似路径的环境变量中使用相对目录(
./lib
在erik的评论中),这会产生一个安全漏洞。vnjpjtjt2#
mysql python是一个c扩展,它可能会失败(没有名为\u mysql的模块)。你可以试试pymysql模块