2016-08-12 25 views
0

Это будет второй раз в моей жизни, рассказывая почти о том же. Разница между этим временем и прошлым временем составляет около 9 месяцев, много сложного обучения и тот факт, что за последние 9 месяцев у меня никогда не было этой проблемы, и мы часто использовали MySQLdb безупречно в течение всего периода времени. Я признаю, что подобный вопрос был задан много раз. Я прочитал ответы и выполнил предложенные исправления. На данный момент я все еще не смог достичь успешного завершения, поэтому я отправляю свой вопрос.Неправильно Конфигурировано: Ошибка при загрузке модуля MySQLdb: нет модуля с именем MySQLdb - Django 1.4 и Google App Engine

Просто для описания моей среды: я запускаю приложение Django в Google App Engine локально с помощью Google App Engine Launcher. Я использую Mac OS X El Capitan.

Когда эти приложения развернуты в Google App Engine, они работают безупречно, как и предполагалось. Однако при запуске локально я последовательно получаю ImportError при попытке запустить приложение.

Позволь мне перечислить некоторые из вещей, которые я проверяемые и/или пытался решить эту проблему:

-установлен MySQL

-установлена ​​MySQL-питон

-Добавлена ​​MySQLdb в «Библиотеке» раздел в app.yaml

-Проверен PYTHONPATH во время выполнения, чтобы подтвердить, что соответствующие каталоги добавлены в путь.

-Add пути перед импортом как фиктивный чек

-Обновленного Google App Engine SDK

Я сделал даже больше, но едва вспомнить их сейчас. При проверке пути во время выполнения, я могу ясно видеть следующий путь к директории google_appengine SDK, где MySQLdb проживает:

/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/MySQLdb-1.2.5 

Разве это не то, что я должен увидеть? Должен ли я указывать на что-то еще? Я также указал на другие каталоги, где у меня установлены другие пакеты python (например, /Library/Python/2.7/site-packages/). Что мне не хватает? Я знаю, что делаю что-то немое, и я в порядке. Я просто хочу прекратить тратить свое время, пытаясь устранить такую ​​глупую проблему. Я использую MySQL каждый день в других проектах и ​​никогда не испытываю таких проблем. Я действительно не знаю, что это на данный момент.

Сообщите мне, если я могу добавить больше полезной информации, и я с радостью обяжусь. Я приведу несколько моих файлов ниже в надежде, что они могут быть полезными.

app.yaml:

application: *omitted* 
version: 1 
runtime: python27 
api_version: 1 
threadsafe: true 

env_variables: 
    DJANGO_SETTINGS_MODULE: 'Freya.settings' 

handlers: 
- url: /favicon\.ico 
    static_files: static/images/favicon.ico 
    upload: static/images/favicon\.ico 
- url: /static 
    static_dir: static 
    application_readable: true 
- url: /.* 
    script: main.app 

libraries: 
- name: django 
    version: "latest" 
- name: MySQLdb 
    version: "latest" 

main.py:

from google.appengine.ext.webapp import util 
import django.dispatch.dispatcher 
import django.core.handlers.wsgi 
from django.conf import settings 
import django.core.signals 
import django.db 
import os 


settings._target = None 

app = django.core.handlers.wsgi.WSGIHandler() 


def main(): 
    util.run_wsgi_app(app) 


if __name__ == '__main__': 
    main() 

settings.py (бит базы данных):

'default': { 
    'ENGINE': 'django.db.backends.mysql', 
    'HOST': '*omitted*', 
    'NAME': '*omitted*', 
    'USER': '*omitted*', 
} 

Любая помощь очень ценится.

Вот пример того, что я пробовал в настройках.py:

import imp 
import sys 
import os 


print('Checking') 

try: 
    imp.find_module('MySQLdb') 
    found = True 
except ImportError: 
    found = False 

print('Found: ' + str(found)) 

import MySQLdb 

print('Import success') 

Выполнение этого, когда я ищу «Найдено: false» Я не нахожу его. Я нахожу «Found: true», который должен действительно сказать мне, что нет никакой проблемы с поиском модуля MySQLdb. Однако, когда он достигает линии import MySQLdb, программа вылетает с ImportError: No module named MySQLdb и линия print('Import success') никогда не была достигнута

Что происходит?

Edit: Я собираюсь попробовать сделать это теперь на моем разделе Linux, хотя я не думаю, что что-то я там поможет мне понять, что делать обратно на Mac OS

ответ

0

После копаться часами я наконец обнаружил корень проблемы. Единственное существенное изменение, произошедшее с момента правильной работы MySQLdb, и время, в течение которого MySQLdb перестало работать должным образом, было связано с обновлением OS X до El Capitan.

Продолжительность:

otool -L /Library/Python/2.7/site-packages/_mysql.so

показал, что _mysql.so искал libmysqlclient.18.dylib в каталоге /usr/lib, когда на самом деле он находился в /usr/local/lib каталоге. Как быстро исправить, я создал символическую ссылку, выполнив следующие действия (все в одной строке BTW):

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.d‌​ylib /usr/local/lib/libmysqlclient.18.dylib

С El Capitan реализован «некорневой режим» Apple, и текущий пользователь (я) является не удалось написать /usr/lib, создание символической ссылки в /usr/local/lib является адекватным и, вероятно, лучше для пользователя Mac.

После выполнения этих шагов MySQLdb смог правильно загрузить; мое приложение было инициализировано и успешно запущено впервые за долгое время.