SDK Google App Engine: неправильно настроен: ошибка при загрузке модуля MySQLdb: модуль с именем _mysql отсутствует - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь запустить приложение Django в Google App Engine SDK (локально) внутри virtualenv с MySQL в качестве базы данных. Все в моем requirements.txt файле устанавливается отлично. Когда я запускаю среду SDK для Google App Engine, я получаю неприятную ошибку, которая кажется распространенной, но у 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?

Мои требования. Текст

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/ imagelib/">

Я также вызываю MySQLdb в моем app.yaml ...

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) Пока я просмотрел вопросы о переполнении стека, и ни один из них, похоже, не помог.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

MySQL-Python, который является расширением C, вероятно, потерпит неудачу (нет модуля с именем _mysql). Вы можете попробовать с pymysql module

0 голосов
/ 04 июля 2018

Установка была настроена в соответствии с рекомендациями Google и не содержала видимых ошибок. Проблема не может быть воспроизведена во внешней среде (аналогичная настройка Django работала нормально), поэтому мы просто пришли к решению, см. Его ниже (установите PYTHONPATH).

GAE запрашивает установку сторонних библиотек в каталог lib/, что делает его виртуальной средой для бедных. Затем lib/ добавляется в путь поиска модуля путем вызова vendor.add('lib') в appengine_config.py.

Это правильно сработало в настройках автора, поэтому GAE удалось импортировать Django из lib/django/. Тогда этот рабочий конфиг не удался загадочным образом для импорта MySQLdb, который наверняка был установлен в тот же lib/.

В ходе исследования мы проверили, может ли переменная окружения PYTHONPATH повлиять на что-либо. Это не так, но его установка устранила проблему:

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

Примечание: избегайте использования относительных каталогов в PATH-подобных переменных среды (./lib в комментарии Эрика), что создает уязвимость в безопасности.

...