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

100

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

14个回答

132

针对使用 Python3 的用户更新: 您可以简单地使用 conda install mysqlclient 安装所需的库以使用 MySQLdb,因为它目前仍然存在。下面的 SO 问题是一个有用的线索:Python 3 ImportError: No module named 'ConfigParser'。安装 mysqlclient 将安装 mysqlclient、mysql-connector 和 llvmdev(至少在我的机器上安装了这三个库)。

以下是我遇到这个问题的经历。如果您对此问题有更好的经验,请编辑或概括一下... 应用一些那种 SO 魔法。

注意:下一段中的注释适用于 Snow Leopard,但不适用于 Lion,后者似乎需要 64 位的 MySQL

首先,MySQLdb 的作者(仍然?)说此处,OS X 自带一个 32 位版本的 Python,但大多数普通人(包括我在内)可能会选择安装 64 位版本的 MySQL。这是个坏决定......如果您已经安装了 64 位版本,请删除它(可在 SO 中找到这个麻烦的任务的说明 here),然后下载并安装 32 位版本(此处提供了包)。

有许多逐步构建和安装 MySQLdb 库的说明。它们之间经常存在细微差别。 这个 在我看来是最受欢迎的,也提供了可行的解决方案。以下是在此基础上做了一些编辑的步骤

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

步骤1: 从 SourceForge 下载最新的MySQL for Python adapter

步骤2: 解压您下载的软件包:

tar xzvf MySQL-python-1.2.2.tar.gz

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

sudo python setup.py clean

根据这个评论中的建议,需要进行以下两个额外的步骤:

第三步b:删除 MySQL-python-1.2.2/build/* 目录下的所有文件--不要相信 "python setup.py clean" 会帮你完成。

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

第四步:原本需要编辑 _mysql.c 文件,但现在已经不再需要了。MySQLdb 社区似乎已经修复了这个 bug。

第五步:创建一个符号链接到 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

第九步:测试是否运行正常。如果您可以导入MySQLdb,则表示它可以正常工作。

python

>>> 导入 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

然后,您应该能够无错误地导入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

这很容易通过Google查找,但为了节省你的麻烦,你将会在这里找到答案(或者也许不是...不是特别具有未来性的URL),并且需要cd ..退出生成目录,那么错误就会消失。

正如我在开头所写的那样,我希望看到这个答案得到推广,因为还有许多其他具体的经验可以避免这个可怕的问题。编辑或提供自己的更好的答案。


1
请注意,10.6(雪豹)上Apple提供的Python更喜欢运行64位(它是32位/64位通用的)。还有其他陷阱。在mysql 5.1.x系列的一段时间里,由mysql打包的OS X tarballs存在缺陷(声称是通用的,但实际上不是)。Python的数据库适配器MySQLdb也有自己的问题。这是一个情况,在这种情况下,您最好使用MacPorts自动构建所需的所有内容。因为出了问题太容易了。 - Ned Deily
8
我还需要运行以下命令:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib - David Underhill
1
我也在Lion上运行,但是我遇到了很大的问题。最终我找到了这个很好的SO问题和答案,并且完全按照它的步骤进行了操作。直到我像David Underhill上面提到的那样添加了以下内容时,它才对我起作用:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib。一旦我运行了这个命令,它就像预期的那样导入了...终于。对于那些处于类似位置的人,这只是一个提示。 - Friendly King
这对我起作用了,只有一个变化:我需要首先执行第6步mysql_config才能使'clean'工作。 - Raj
2
结果发现我有mysql库,但只是没有正确链接。Mac OS ElCapitan不允许链接到/usr/lib。所以对我来说仅需执行以下命令即可:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib。 - Maruthi
显示剩余8条评论

101

在Mac OS X 10.8 (山狮), 10.9 (美洲狮), 10.10 (优胜美地)和10.11 (el Capitan)上,提供一种快速简便的方法:

假设您已经安装了XCode、其命令行工具,Python和MySQL。

  1. Install PIP:

    sudo easy_install pip
    
  2. Edit ~/.profile: (Might not be necessary in Mac OS X 10.10)

    nano ~/.profile
    

    Copy and paste the following two line

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

    Save and exit. Afterwords execute the following command:

    source  ~/.profile
    
  3. Install MySQLdb

    sudo pip install MySQL-python
    

    To test if everything works fine just try

    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 

2
谢谢,这个解决方案在Mac OSX 10.9上也有效 :-) - matsoftware
2
这对我非常有效(Yosemite公共测试版;Mysql 5; Py2.7),但我需要从下面执行“sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib”命令。 - Michael Scott Asato Cuthbert
1
刚刚验证了这个在10.10.4上可以运行。另外,使用Homebrew安装的mysql,不需要更改.profile文件就可以使其正常工作。 - Isotopp
在Mac OSX 10.10.5上,编辑~/.profile文件后,对我有效的方法是:1.) $brew install py26-mysql 2.) $ pip install MYSQL-python - AdjunctProfessorFalcon
1
安装了MySQL后,使用brew install mysql命令,我不必执行第二个步骤。 - dav.garcia
显示剩余8条评论

36

通过Macports安装mysql和python,端口管理者已经完成了所有困难的工作。

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

如果你只需要连接到 MySQL 而不是运行服务器,那么第一行就足够了。应该安装你所需的内容。(请参见 Stack Overflow 上有关 mysql 服务器的评论)。

现在(2013 年初),MacPorts 将为常见的操作系统和可执行体系结构组合提供二进制下载。对于其他组合(以及如果您请求它),它将从源代码构建。

一般来说,在需要安装复杂的库等情况下,可以使用 MacPorts(或 Fink)进行帮助。

如果只使用 Python 代码并且具有简单的 C 依赖项,则可以通过 setuptools 等设置,但如果混合使用两者,则会变得很复杂。


3
请注意,在开始使用MacPorts时,确保您的路径偏好于/opt/local/bin而不是/usr/bin,因为MacPorts会在/opt/local下安装软件。 - Teemu Kurppa
4
是的!如果您只需要连接到现有的MySQL服务器,请跳过第二行。不幸的是,由于涉及许多依赖关系,在Mac OS X上尝试使用Python连接MySQL是一个例子,更容易让MacPorts安装额外的Python实例,而不是试图自己处理软件包管理。 - Ned Deily
顺便提一下,如果你收到了一个弃用警告,可以在以下页面找到解决方法:https://bugs.launchpad.net/python-mysqldb/+bug/341943 - Jay Taylor
4
请注意,如果你仅仅执行第一行(至少需要 py27-mysql),它最终会安装 mysql5。这是通过下载并编译源代码实现的,可能与你的期望不符。真可恶。 - Ben Hardy
@BenHardy - 它会获取所有已安装的内容,这正是您想要的,也是我所指的 - 现在,MacPorts会集中构建Lion和Snow Leopard可执行文件,因此在大多数情况下不需要进行本地编译。 - mmmmmm
请注意,这将安装MySQLdb(导入MySQLdb),而不是其他mysql连接器。 - Joshua Richardson

15

安装pip:

sudo easy_install pip

安装brew:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

安装mysql:

brew install mysql

安装MySQLdb

sudo pip install MySQL-python

如果您遇到编译问题,请尝试像这里的其中一条回答中所述那样编辑 ~/.profile 文件。


谢谢!这在Sierra [OSX 10.12.6 (16G29)]上运行良好。 - Hara
curl: (22) 请求的 URL 返回错误:404 Not Found - Thirupathi Thangavel
尝试了一下,但是使用 pip install mysqlclient 安装的。可以工作! - jeremysprofile

13

在完成第9步时,我遇到了一个错误,这是另一步我不得不经历的过程:

ImportError: dlopen(/Users/rick/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib

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

参考资料:感谢!http://ageekstory.blogspot.com/2011_04_01_archive.html


9

在Mac上安装MySQL-Python中所述:

pip uninstall MySQL-python
brew install mysql
pip install MySQL-python

那么测试它:
python -c "import MySQLdb"

6

您可以尝试使用纯Python的pymysql

sudo easy_install pymysql

(如果您已经安装了pip,则可以使用它。)然后,在您的代码中import MySQLdb之前添加以下内容:

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass

4

我最近在使用新的Lion系统时遇到了这个问题(又一次!)。

我找到了一个最佳解决方案(仍然不是100%最优,但可行):

您可以通过从Apple下载XCode / Dev Tools来获取它-这是一个大型下载-

…但是我推荐使用这个github,它具有您所需的内容(并且不需要XCode):https://github.com/kennethreitz/osx-gcc-installer

我下载了他们为lion预构建的PKG,https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg

  • 确保您已经下载了MYSQL Community的64位版本。(DMG安装是一个简单的路线) http://dev.mysql.com/downloads/mysql/

  • 设置路径如下:

    export PATH=$PATH:/usr/local/mysql-XXXX

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

    export ARCHFLAGS='-arch x86_64'

注意:

1 在 mysql-XXXX 中,XXX 是您下载的特定版本。(可能 /usr/local/mysql/ 也可以,因为这很可能是相同的别名,但我不会假装知道您的设置)

2 我看到有人建议将 ARCHFLAGS 设置为“-arch i386 -arch x86_64”,但仅指定 x86_64 对我来说似乎效果更好。(我可以想出一些原因,但它们并不严格相关)。

  • 安装 MySQL-python:

    easy_install MySQL-python

  • 最后一步:

永久添加 DYLD_LIBRARY_PATH!

您可以将其添加到 bash_profile 或类似文件中。 对我来说,这是缺失的一步,没有它,我的系统继续坚持在找 _mysql.so 等错误。

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

@richard-boardman,刚注意到您的软链接解决方案,这实际上可能正在执行与我的 PATH 解决方案相同的操作...朋友们,无论哪种方法都最适合您。

最佳参考资料:http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/


3

或者简单地尝试:

> sudo easy_install MySQL-python

如果出现以下错误:

EnvironmentError: mysql_config not found

那么只需运行以下命令:
> export PATH=$PATH:/usr/local/mysql/bin

1

这篇回答是一个更新,大约在2019年11月。目前流行的pip安装方式无法在MacOS 10.13(以及可能的其他版本)上提供可用的设置。下面是我让事情正常工作的简单方法:

brew install mysql
pip install mysqlclient

如果您需要安装brew的帮助,请查看此网站: https://brew.sh/


这在我的Mac OS X Monterey上有效。 - Aerodyno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接