Ошибка при запуске dev_appserver.py в gcloud «Ошибка импорта: нет модуля с именем MySQLdb._mysql»? - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь развернуть приложение Python-Flask в Google App Engine.Приложение отлично работает без MySQL.При импорте from flask_mysqldb import MySQL dev_appserver.py возвращает ошибку ImportError: No module named MySQLdb._mysql

Я обновил app.yaml и needs.txt (пробовал также MySQL-python, PyMySQL)

libraries:
- name: MySQLdb
  version: latest
Flask-MySQLdb==0.2.0
mysqlclient==1.4.1

Первые несколько строк main.py

from flask import Flask, render_template, flash, redirect, url_for, session, logging, request
from flask_mysqldb import MySQL

app = Flask(__name__)

# Config MySQL
app.config['MYSQL_HOST'] = '35.236.72.247'
app.config['MYSQL_USER'] = <removed>
app.config['MYSQL_PASSWORD'] = <removed>
app.config['MYSQL_DB'] = 'myFlaskApp'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'

# Initialize MySQL
mysql = MySQL(app)

Конечный дамп dev_appserver.py app.yaml

INFO     2019-02-09 01:13:00,098 devappserver2.py:278] Skipping SDK update check.
INFO     2019-02-09 01:13:00,172 api_server.py:275] Starting API server at: http://localhost:52922
INFO     2019-02-09 01:13:00,178 dispatcher.py:256] Starting module "default" running at: http://localhost:8080
INFO     2019-02-09 01:13:00,179 admin_server.py:150] Starting admin server at: http://localhost:8000
INFO     2019-02-09 01:13:02,374 instance.py:294] Instance PID: 28866
ERROR    2019-02-09 01:13:04,295 wsgi.py:263]
Traceback (most recent call last):
  File "/Users/zq/Desktop/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/Users/zq/Desktop/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/Users/zq/Desktop/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "/Users/zq/Desktop/Python-Flask/main.py", line 3, in <module>
    from flask_mysqldb import MySQL
  File "/Users/zq/Desktop/Python-Flask/lib/flask_mysqldb/__init__.py", line 1, in <module>
    import MySQLdb
  File "/Users/zq/Desktop/Python-Flask/lib/MySQLdb/__init__.py", line 18, in <module>
    from . import _mysql
  File "/Users/zq/Desktop/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/runtime/sandbox.py", line 1097, in load_module
    raise ImportError('No module named %s' % fullname)
ImportError: No module named MySQLdb._mysql
INFO     2019-02-09 01:13:04,301 module.py:861] default: "GET / HTTP/1.1" 500 -

Как это исправить?Или иначе, используйте MySQL в моем приложении фляги?Приложение отлично работает локально С MySQL в моей системе.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Это просто объяснение конфликта, который вы упомянули в своем ответе.

Вы смешивали две разные процедуры использования сторонних библиотек в своем приложении GAE:

В результате действия, описанного в вашем ответе, была удалена копия библиотеки, поставляемой в комплекте с вашим приложением, что достаточно для корректной работы приложения, развернутого в GAE.Обратите внимание, что вы не упомянули:

  • удаление библиотеки из файла requirements.txt, что, если не выполнено, означает, что вы столкнетесь с проблемой снова, если / когда повторно выполнитеlib установка с использованием файла
  • , если выполняется локально, то есть, если требуемая установка mysqldb в локальной системе действительно выполнена
0 голосов
/ 11 февраля 2019

git rm -f <project-dir>/lib/MySQLdb

gcloud app deploy

Удалил lib / MysqlDB и снова отправил его в облако Google, и это сработало.По-видимому, моя локальная библиотека конфликтовала с родным mysqldb AppEngine.

Теперь я просто обошелся без запуска dev_appserver.py app.yaml

...