Хобрук: Ваш путь к мастерству в программировании

Нет модуля с именем _mysql - Google App Engine и Django

Прежде всего, я работаю над Mac (Yosemite).

Я создал простой проект Django с помощью Google App Engine. Я использую Cloud SQL в производственной среде и MySQL в среде разработки, как рекомендовано в документации. Конечно, в проекте используется virtualenv на моей машине разработчика.

Я могу без проблем запустить проект с помощью встроенной в Django команды runserver, и даже если я разверну ее в GAE, все в порядке.

Однако, если я запускаю сервер разработки с пусковой установкой GAE, он вызывает ошибку всякий раз, когда я пытаюсь загрузить страницу:

ImproperlyConfigured: Error loading MySQLdb module: No module named _mysql

Я установил ту же версию MySQLdb, что и GAE. В настоящее время его 1.2.4. MySQLdb доступен для GAE SDK, поэтому я понятия не имею, почему он не может импортировать _mysql.


Ответы:


1

Наконец-то я нашел обходной путь.

Просто добавить MySQLdb в вашу библиотеку GAE недостаточно. MySQLdb пытается импортировать _mysql, который является файлом .so или .c, в зависимости от того, какую версию MySQLdb вы используете. Я полагаю, что их импорт напрямую работает некорректно. Может быть, потому что это файл C низкого уровня и, как указано в документации, GAE не поддерживает никаких расширений C. Если вы знаете более подробное объяснение, поделитесь с нами в комментариях.

Решение:

Прежде всего мне пришлось переименовать _mysql.so. У меня сейчас просто mysql.so.

Затем создайте файл с именем _mysql.py в том же каталоге и поместите в него этот код:

def __bootstrap__():
   global __bootstrap__, __loader__, __file__
   import sys, pkg_resources, imp
   __file__ = pkg_resources.resource_filename(__name__,'mysql.so') #point to your renamed _mysql.so
   __loader__ = None; del __bootstrap__, __loader__
   imp.load_dynamic(__name__,__file__)
__bootstrap__()

GAE теперь должен импортировать MySQLdb без ошибок.

20.06.2015
  • Не нужно переименовывать _mysql.so в mysql.so 13.03.2016
  • Для меня это сработало только после переименования _mysql.so в mysql.so 23.05.2018
  • Новые материалы

    Создание успешной организации по науке о данных
    "Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...