Django - MySQLdb:未找到符号:_mysql_affected_rows

时间:2009-08-19 10:31:48

标签: python mysql django

当尝试从Django使用MySQLdb时,一位同事收到此错误消息:

[...]
ImproperlyConfigured("Error loading MySQLdb module: %s" % e) django.core.exceptions.ImproperlyConfigured: 
Error loading MySQLdb module: dlopen(/Users/roy/.python-eggs/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg-tmp/_mysql.so, 2): 
Symbol not found: _mysql_affected_rows 
Referenced from: /Users/roy/.python-eggs/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg-tmp/_mysql.so Expected in: dynamic lookup

他正在使用OS X 10.5,Python 2.5(使用OS X到达),MySQL 5.1& MySQLdb 1.2.3c1。

知道如何攻击这个吗?

7 个答案:

答案 0 :(得分:6)

最好从头开始安装mysql和它的Python绑定,每当我在OS X 10.4或10.5上需要MySQLdb时,我都会使用以下步骤:

  1. 为您的系统安装MySQL,dmg安装程序应该足够了

  2. MySQL的默认位置将在某处:/usr/local/mysql-5.0.45-osx10.4-i686。从/usr/local/mysql/lib开始,创建一个软链接:

    ln -s ../../mysql-5.0.45-osx10.4-i686/lib mysql

  3. 下载MySQLdb source并解压缩

  4. 编辑解压缩的MySQLdb目录下的文件site.cfg,注释掉registry_key并将mysql_config设置为:

    mysql_config = /usr/local/mysql-5.0.45-osx10.4-i686/bin/mysql_config

  5. 从MySQLdb目录中继续构建常规Python包:

    sudo python setup.py install

  6. 如果一切正常,请在新终端中测试MySQLdb:

    python -c "import MySQLdb"

  7. 如果成功,上述内容应该不返回。上面的例子显示了OS 10.4和MySQL 5.0,用适当的工具版本替换它们。

答案 1 :(得分:1)

这很复杂但很难,但它适用于 MacOSX Lion

您将使用:

Xcode
Brew
Port
Pip

确保您安装了Xcode(4.X),并且您的mac配置为查找可执行文件,因为在安装mysql-python的过程中 Macports 将使用它。

确保已安装Xcode命令行工具

启动Xcode app>>首选项>>下载>> “组件”标签>>命令行工具>>点击安装

从终端运行以下命令。

xcodebuild -version

如果您遇到此错误

/usr/bin/xcodebuild -version Error: No developer directory found at /Developer

尝试运行

/usr/bin/xcode-select
这将更新开发人员目录路径。

然后您需要手动切换到/ Applications:

中的新Xcode安装目录
sudo /usr/bin/xcode-select -switch /Applications/Xcode.app

Ref

卸载 mysql [备份数据之前!]。

sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
edit /etc/hostconfig and remove the line MYSQLCOM=-YES-
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*

使用brew再次安装Mysql:

brew install mysql

您可能会遇到此错误。

Error: Cannot write to /usr/local/Cellar

fix

你应该准备好了。

sudo port install py27-mysql

pip install mysql-python

python -c "import MySQLdb"

如果您没有看到安装MySQLdb的任何错误。

答案 2 :(得分:0)

是的,MySQLDb egg是针对不同版本的libmysqlclient编译的,而不是系统中存在的版本。您需要获得一个合适的鸡蛋(卸载前面的鸡蛋)或者从头开始构建MySQLDb以针对系统中存在的库进行编译。

我不知道为什么,但我认为你的同事可能会对这个问题感兴趣:

Configuring Django to use remote mysql server?

答案 3 :(得分:0)

在OS X 10.6上,我遇到了Thierry在32位Python(2.6.5)上的解决方案。

升级到Python 2.7 64位版本为我解决了这个问题。

答案 4 :(得分:0)

使用MySQL 10.6 dmg和MySQLdb ver 1.2.3,Thiery的说明对我来说很好用

从一个干净的平板开始是有帮助的,因此请确保卸载早期版本的MySQL。请查看此帖子以获取卸载帮助How do you uninstall MySQL from Mac OS X?

谢谢!

答案 5 :(得分:0)

尝试运行:

easy_install -U distribute
pip install --upgrade mysql-python

注意: 如果在编译时有任何缺少符号的错误,则需要使用mysql开发库来编译它。

在Linux上,它很容易安装:

sudo apt-get install mysql-devel

或:

sudo yum install mysql-devel

在Mac上你可能需要下载MySQL Connector然后你可能需要传入一个--with-mysql-libs选项来指向解压缩C库时的目录。 或者您可以尝试将库放在默认目录中:/ usr / lib64 / mysql

答案 6 :(得分:-1)

sudo apt-get install python-mysqldb

确保它应该正确安装

或者您可以使用其他替代方法,例如easy_install