2016-08-12 99 views
0

这将是我人生中第二次发布几乎完全相同的东西。这次和上次的区别大概是9个月,很多困难的学习,以及过去9个月里我从来没有遇到过这个问题,并且在整个时间段内都经常使用MySQLdb。我认识到,对此的类似问题已多次提出。我已阅读回复并执行建议的修复。到目前为止,我仍然无法得出一个成功的结论,这就是我发布我的问题的原因。错误配置:加载MySQLdb模块时出错:没有名为MySQLdb的模块 - Django 1.4和Google App Engine

只是为了描述我的环境:我使用Google App Engine启动器在本地运行Google App Engine上的Django应用程序。我正在使用Mac OS X El Capitan。

当这些应用程序部署在Google App Engine上时,它们按预期工作完美无瑕。但是,在本地运行时,我会在尝试运行应用程序时始终得到ImportError。

让我列举一些我已经检查的事情和/或试图解决这个问题:

-Installed MySQL的

-Installed的mysql-python的

- 增加MySQLdb的以 “图书馆” app.yaml中的部分

- 在运行时检查PYTHONPATH以确认将正确的目录添加到路径。进口的假支票之前

- 添加路径

- 更新谷歌的App Engine SDK

我更是做了,但还能勉强现在回忆起来他们。当在运行时检查的路径,我可以清楚地看到到MySQLdb的所在google_appengine SDK目录路径如下:

/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') 

这样做,当我找'找到:假'我找不到它。我发现'找到:真的'这应该告诉我,找到MySQLdb模块没有任何问题。但是,当它到达import MySQLdb行时,程序崩溃ImportError: No module named MySQLdb和行print('Import success')永远不会到达

发生了什么事?

编辑:我要现在做这在我的Linux分区,但我不认为我所做会有帮我找出什么做回在Mac OS

回答

0

周围挖掘后几个小时我终于发现了根本问题。从MySQLdb正常工作以及MySQLdb停止正常工作的时间开始,唯一重要的变化是我将OS X升级到El Capitan。

运行:

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

透露,_mysql.so是在/usr/lib目录搜索libmysqlclient.18.dylib时真的它位于/usr/local/lib目录。作为一个快速解决,我创建了一个符号链接运行以下(全部在一行BTW):

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

由于埃尔卡皮坦实施了苹果的“无根”模式,以及当前用户(我)无法写入/usr/lib,在/usr/local/lib中创建符号链接已足够,可能对Mac用户更好。

执行完这些步骤后,MySQLdb能够正常加载;很久以前,我的应用程序首次初始化并成功运行。

相关问题