在Mac OS 10.6.6上配置django与python-mysql时出错

3 投票
3 回答
3995 浏览
提问于 2025-04-16 12:59

我的环境设置:

  • Mac OS 10.6.6 - x86_64
  • MySQL 5.5.8
  • Python 2.7.1
  • Django 1.2.5
  • 通过 easy_install 安装了 mysql-python

我的情况:

我一直在努力让我的环境正常工作。问题出在 mysql-python 接口上。最开始,我在 Python 中做一个导入语句时,遇到了和 Django 类似的问题:

import MySQLdb

但我看了这个 问题/解决方案,它成功地解决了我的问题。我安装了 Django,运行得很好,但在使用 mysql 接口时遇到了问题。

当我打开终端并输入:

>> python manage.py dbshell

就会出现以下错误:

追踪记录(最近的调用在最前面): 文件 "manage.py",第 11 行, execute_manager(settings) 文件 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/init.py",第 438 行,执行管理器 utility.execute() 文件 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/init.py",第 379 行,执行 self.fetch_command(subcommand).run_from_argv(self.argv) 文件 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/init.py",第 261 行,获取命令 klass = load_command_class(app_name, subcommand) 文件 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/init.py",第 67 行,加载命令类 module = import_module('%s.management.commands.%s' % (app_name, name)) 文件 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/utils/importlib.py",第 35 行,导入模块 import(name) 文件 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/commands/dbshell.py",第 4 行, from django.db import connections, DEFAULT_DB_ALIAS 文件 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/init.py",第 77 行, connection = connections[DEFAULT_DB_ALIAS] 文件 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/utils.py",第 92 行,getitem backend = load_backend(db['ENGINE']) 文件 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/utils.py",第 33 行,加载后端 return import_module('.base', backend_name) 文件 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/utils/importlib.py",第 35 行,导入模块 import(name) 文件 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/backends/mysql/base.py",第 14 行, raise ImproperlyConfigured("加载 MySQLdb 模块时出错: %s" % e) django.core.exceptions.ImproperlyConfigured: 加载 MySQLdb 模块时出错: dlopen(/Users/adogc45/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): 找不到库: libmysqlclient.16.dylib 引用自: /Users/adogc45/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so 原因: 找不到图像

现在,我不明白为什么在 Python 中导入这个模块时没有报错,但在 Django 中使用 mysql 接口时却出错。

顺便说一下,我的 settings.py 看起来是这样的:

DATABASES = {
'default': {
    'ENGINE': 'mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.

另外,那个文件确实存在于 .../MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp

所以,我完全不知道发生了什么。

3 个回答

0

试试这个:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',

如果你在使用 Django 1.2.5,不要只写 mysql

2

我遇到过类似的问题,我是通过在我的 .bash_profile 文件中加了一行代码来解决的。这个 .bash_profile 文件就像是我家目录下的一个神奇文件,它会在我打开终端时自动运行。具体的代码是:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

这里面提到的 libmysqlclient.16.dylib 文件就在这个目录里。

但是,当我尝试在 Apache 中运行这个 Python 的 wsgi 模块时,无论我怎么做,Apache 都找不到 libmysqlclient.16.dylib 文件。我试过:

sys.path.append('/usr/local/mysql/lib')

os.environ['DYLD_LIBRARY_PATH'] = '/usr/local/mysql/lib'

但是都没用……看起来 Apache 并没有读取这个环境变量,而在这个情况下 Python 也没有读取我的 .bash_profile 文件……求助!!!

5

把这个命令理解为是在设置一个叫做“DYLD_LIBRARY_PATH”的环境变量。这个变量的作用是告诉系统去哪里找一些特定的库文件。在这里,我们把它设置为指向MySQL的库文件所在的文件夹,同时也保留了之前的设置。

另外,下面的代码块提到的内容是说这个命令在一个叫做“虚拟环境”的地方也能帮到我。虚拟环境是一种让你可以在不同项目中使用不同版本的库和工具的方式。

pip install MySQL-python
pip install --upgrade MySQL-python

撰写回答