Django - MySQLdb: 找不到符号 _mysql_affected_rows
一位同事在用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。
有没有什么办法可以解决这个问题呢?
6 个回答
是的,MySQLDb这个包是用一个和你系统里不同版本的libmysqlclient编译的。你需要要么找到一个合适的包(先卸载之前的),要么从头开始编译MySQLDb,这样才能和你系统里的库匹配。
我不知道为什么,但我觉得你的同事可能会对这个问题感兴趣:
这个过程有点复杂和困难,但在MacOSX Lion上是可以成功的。
你需要使用:
Xcode
Brew
Port
Pip
确保你已经安装了Xcode(4.X版本),并且你的Mac已经设置好可以找到可执行文件,因为在安装mysql-python的过程中会用到Macports。
确保安装了Xcode的命令行工具。
打开Xcode应用程序 >> 选择偏好设置 >> 下载 >> 组件选项卡 >> 命令行工具 >> 点击安装。
接下来在终端中运行以下命令。
xcodebuild -version
如果你遇到这个错误:
/usr/bin/xcodebuild -version Error: No developer directory found at /Developer
可以尝试运行:
/usr/bin/xcode-select
这会更新开发者目录的路径。
然后你需要手动切换到新的Xcode安装目录,路径在/Applications下:
sudo /usr/bin/xcode-select -switch /Applications/Xcode.app
卸载 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
这是解决方法。
现在你应该准备好了。
sudo port install py27-mysql
pip install mysql-python
python -c "import MySQLdb"
如果没有看到任何错误,说明MySQLdb已经安装成功。
如果你需要在你的电脑上安装 MySQL 和它的 Python 绑定,最好的办法是从头开始安装。以下是我在 OS X 10.4 或 10.5 上安装 MySQLdb 时使用的步骤:
首先,去 MySQL 的官网 下载适合你系统的 MySQL,使用 dmg 安装包就可以了。
安装后,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
然后,下载 MySQLdb 的源代码,并解压缩它。
在解压后的 MySQLdb 目录中,找到并编辑
site.cfg
文件,把registry_key
注释掉,并把mysql_config
设置为:mysql_config = /usr/local/mysql-5.0.45-osx10.4-i686/bin/mysql_config
接下来,在 MySQLdb 目录中,按照正常的方式构建 Python 包:
sudo python setup.py install
如果上面的步骤都没有问题,可以在新的终端中测试 MySQLdb:
python -c "import MySQLdb"
如果一切顺利,上面的命令不会返回任何内容。这个例子是针对 OS 10.4 和 MySQL 5.0 的,你可以根据自己使用的工具版本进行替换。