升级Python后无法使用mysqldb

0 投票
2 回答
1088 浏览
提问于 2025-04-16 01:27

我在使用OSX 10.6.3系统。

刚刚把Python更新到了Python 2.6.5(版本号:r265:79359)。

重新编译并安装了mysqldb(MySQL-python-1.2.3)。

重新编译并安装了django(这应该没关系,问题似乎出在mysqldb上)。

我遇到了以下错误。

File "<stdin>", line 1, in <module>
File "build/bdist.macosx-10.3-fat/egg/MySQLdb/__init__.py", line 19, in <module>    
File "build/bdist.macosx-10.3-fat/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.3-fat/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/joshuamerriam/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.3-fat.egg-tmp/_mysql.so, 2): Symbol not found: _mysql_affected_rows
  Referenced from: /Users/joshuamerriam/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.3-fat.egg-tmp/_mysql.so
  Expected in: dynamic lookup

这个错误在这里提到过(http://mysql-python.sourceforge.net/FAQ.html),但没有说明怎么解决。我有点搞不懂。谁能帮帮我?

2 个回答

1

其实,你链接的页面内容暗示了一个可能的解决办法:

这是来自Mac OS X的一个情况。看起来是编译器不匹配,但这次是两个不同版本的GCC之间的冲突。几乎每次GCC的主要版本更新都会在某种程度上改变ABI(应用程序二进制接口),所以比如说用GCC-3.3和GCC-4.0编译的代码链接在一起可能会有问题。

看起来mysqldb所链接的MySQL客户端库可能是用一个旧的或不兼容的GCC版本编译的。

因为其他答案中的步骤对你没用,所以我建议你可以尝试以下方法(我自己没有测试过):

  • 下载并构建MySQL客户端库的源代码,安装到一个不太显眼的地方(例如 /your/homedir/usr-mysql/)。
  • 手动重建mysqldb,编辑site.cfg文件,把mysql_config变量指向例如/your/homedir/usr-mysql/bin/mysql_config
  • 再试一次。

(注意,关于MySQL服务器你不用担心——客户端库总是使用MySQL网络协议与服务器通信,即使连接只是通过本地套接字。)

1

既然你已经选择使用MacPorts来安装MySQL客户端库,那么长期来看,最简单且最少麻烦的办法就是尽可能多地使用MacPorts里的其他组件。也就是说,你可以使用MacPorts里的Python和MySQLdb库。其实还有一个Django的版本可以用。这里有个小提示:在Snow Leopard系统上,MacPorts的Python 2.6版本的Tkinter会拉入很多额外的组件,这些组件可能你并不想花时间去安装。如果你不打算用到Tkinter,可以选择不安装它:

sudo port install python26 +no_tkinter py26-mysql py26-django

你可能还想安装一个叫做python_select的组件,用它来选择/opt/local/bin/python命令的默认版本:

sudo python_select python26

你需要确保你的命令行环境的PATH里包含了MacPorts的bin目录和Python框架的bin目录:

export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin:/opt/local/bin:$PATH"

撰写回答