如何在Mac OS X上安装MySQLdb(Python连接MySQL的数据访问库)?

100 投票
14 回答
200592 浏览
提问于 2025-04-15 14:26

我该如何在Mac OS X上让MySQLdb正常工作呢?

14 个回答

36

通过Macports安装mysql和python。这个工具帮你处理了很多复杂的事情。

sudo port install py26-mysql 
sudo port install mysql5-server

这应该能安装你需要的东西。(可以查看Stack Overflow上的评论,了解关于mysql服务器的更多信息

如果你只是想连接mysql,而不是运行一个服务器,那么第一行的内容就足够了。

在2013年初,Macports会提供常见操作系统和可执行架构的二进制下载,对于其他情况(如果你需要的话),它会从源代码编译。

一般来说,macports(或者fink)在需要安装复杂库的时候会很有帮助。

如果只是用python代码,简单的C依赖可以通过setuptools等工具设置,但如果把两者混在一起,就会变得复杂。

101

这里有一个简单的方法,适用于 Mac OS X 10.8 (山狮)、10.9 (美洲狮)、10.10 (优胜美地) 和 10.11 (埃尔卡皮坦):

我假设你已经安装了 XCode、它的 命令行工具、Python 和 MySQL。

  1. 安装 PIP:

    sudo easy_install pip
    
  2. 编辑 ~/.profile: (在 Mac OS X 10.10 中可能不需要)

    nano ~/.profile
    

    复制并粘贴以下两行

    export PATH=/usr/local/mysql/bin:$PATH
    export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
    

    保存并退出。然后执行以下命令:

    source  ~/.profile
    
  3. 安装 MySQLdb

    sudo pip install MySQL-python
    

    要测试一切是否正常,可以尝试

    python -c "import MySQLdb"
    

对我来说,这个方法非常有效。

如果你遇到一个关于缺少库的错误:Library not loaded: libmysqlclient.18.dylib,那么你需要将它链接到 /usr/lib,方法如下:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 
132

给使用Python3的朋友们的更新: 你可以直接使用 conda install mysqlclient 来安装使用MySQLdb所需的库。目前的情况是,这个命令会安装mysqlclient、mysql-connector和llvmdev(至少在我的电脑上安装了这三个库)。

下面是我在解决这个问题时的一些经历。如果你有更好的经验,欢迎修改或补充,让这个回答更完善。

注意:下面段落的评论适用于Snow Leopard,但不适用于Lion,后者似乎需要64位的MySQL

首先,MySQLdb的作者(还在吗?)在这里提到一个很麻烦的问题,那就是OS X自带的是32位版本的Python,而大多数普通用户(包括我自己)可能会直接安装64位的MySQL。这是个错误的选择……如果你安装了64位版本,请把它卸载掉(关于这个麻烦的操作可以在SO上找到说明,点击这里),然后下载并安装32位版本(可以在这里找到)。

关于如何构建和安装MySQLdb库,有很多详细的步骤说明。它们之间常常有些微妙的差别。我觉得这个是最受欢迎的,提供了有效的解决方案。下面是我根据它做的一些修改。

步骤0: 在开始之前,我假设你已经在Mac上安装了MySQL、Python和GCC

步骤1: 从SourceForge下载最新的MySQL for Python适配器

步骤2: 解压你下载的包:

tar xzvf MySQL-python-1.2.2.tar.gz

步骤3: 在文件夹内,清理包:

sudo python setup.py clean

额外的几个步骤,(来自这个评论

步骤3b: 删除MySQL-python-1.2.2/build/*目录下的所有内容——不要指望“python setup.py clean”能帮你完成这项工作。

步骤3c: 删除Users/$USER/.python-eggs下的egg文件。

步骤4: 最初需要编辑_mysql.c,但现在不再需要了。MySQLdb社区似乎已经修复了这个bug。

步骤5: 在lib下创建一个符号链接,指向一个名为mysql的子目录。编译时会在这里查找。

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

步骤6: 编辑setup_posix.py,修改以下内容:

mysql_config.path = "mysql_config"

改为:

mysql_config.path = "/usr/local/mysql/bin/mysql_config"

步骤7: 在同一目录下,重新构建你的包(忽略随之而来的警告)。

sudo python setup.py build

步骤8: 安装包,完成。

sudo python setup.py install

步骤9: 测试是否成功。如果你能导入MySQLdb,就说明成功了。

python

>>> import MySQLdb

步骤10: 如果在尝试导入时收到错误,提示 Library not loaded: libmysqlclient.18.dylib,并且结尾是 Reason: image not found,你需要创建一个额外的符号链接,如下:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

然后你应该能够顺利地 import MySQLdb,没有任何错误。

不过还有一个小问题,如果你从构建目录启动Python,会出现这个错误:

/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3: UserWarning: Module _mysql was already imported from /Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.pyc, but XXXX/MySQL-python-1.2.3c1 is being added to sys.path

这个问题很容易在网上找到解决办法,但为了省去你的麻烦,你会发现自己最终会来到这里(或者不……这个链接可能不太稳定),你需要执行 cd .. 退出构建目录,这样错误就会消失。

正如我在开头所说,我希望这个回答能更普遍一些,因为还有很多其他人也遇到过这个麻烦的问题。欢迎编辑或提供你自己的更好答案。

撰写回答