【问题标题】:How to install MySQLdb (Python data access library to MySQL) on Mac OS X?如何在 Mac OS X 上安装 MySQLdb(MySQL 的 Python 数据访问库)?
【发布时间】:2010-11-29 17:23:16
【问题描述】:

我是一名 Python 新手,但我刚刚花了一天时间研究如何让 MySQLdb 正常工作,根据谷歌的说法,宇宙包括许多关于它是什么 PITA 的参考,以及大量的指南似乎已经过时了。鉴于此站点旨在解决此类问题,并且我知道我将来需要参考解决方案,我将提出问题,提供我的答案并看看还有什么浮动到表面。

所以问题是如何让MySQLdb 在 Mac OS X 上工作?

【问题讨论】:

    标签: python mysql macos


    【解决方案1】:

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

    这是我在这个问题上的漫无边际经历的故事。如果您对这个问题有更好的经验,希望看到它被编辑或概括……应用一些 SO 魔法。

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

    首先,MySQLdb 的作者(还是?)说here 最有害的问题之一是 OS X 安装了 32 位版本的 Python,但大多数普通人(包括我自己)可能会跳到安装 64 位版本的 MySQL。糟糕的举动...如果您已安装 64 位版本,请删除它(有关此繁琐任务的说明可在 SO here 上找到),然后下载并安装 32 位版本(包 here

    有很多关于如何构建和安装 MySQLdb 库的分步说明。他们经常有细微的差别。 This 对我来说似乎是最受欢迎的,并提供了可行的解决方案。我已经复制了它,并在下面进行了一些编辑

    第 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
    

    几个额外的步骤,(来自this comment

    步骤 3b: 删除 MySQL-python-1.2.2/build/* 目录下的所有内容——不要相信“python setup.py clean”会为你做这件事

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

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

    第 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:用户警告:模块_mysql已从/Library/Python导入/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.pyc,但正在将 XXXX/MySQL-python-1.2.3c1 添加到 sys.path

    这对 Google 来说很容易,但为了省去你的麻烦,你最终会找到 here(或者可能不是......不是一个特别面向未来的 URL)并发现你需要 cd .. build 目录,错误应该会消失。

    正如我在顶部所写的那样,我希望看到这个答案被概括,因为这个可怕的问题还有许多其他具体的经验。编辑掉,或提供您自己的更好的答案。

    【讨论】:

    • 请注意,Apple 在 10.6 (Snow Leopard) 上提供的 Python 更喜欢运行 64 位(它是 32 位/64 位通用的)。还有其他陷阱。在 mysql 5.1.x 系列的一段时间里,mysql 打包的 OS X tarball 有问题(声称是通用的但不是)。 Python 的数据库适配器 MySQLdb 有其自身的问题。在这种情况下,建议您只使用 MacPorts 自动构建所需的一切。出问题太容易了。
    • 我将把它留在这里,以防它帮助其他人。我还必须修改 site.cfg 以将 mysql_config 设置为正确的路径。我认为它最初没有路径,因此默认为 /opt/...,但我需要将其指向 /usr/local/mysql/...
    • 我还得跑:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
    • 我也在 Lion 上运行,但在使其正常工作时遇到了很多问题。我终于找到了这个很棒的 SO 问题和答案,并 100% 遵循它。在我添加之前,它对我不起作用,正如上面提到的大卫安德希尔:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib。一旦我运行它,它就会按预期导入......最后。哇哇哇。仅供类似职位的人参考。
    • 原来我有 mysql 库,但只是没有正确链接。 Mac OS ElCapitan 不允许链接到 /usr/lib。所以这对我来说就足够了:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
    【解决方案2】:

    Mac OS X 10.8 (Mountain Lion)、10.9 (Mavericks)、10.10 (Yosemite) 和10.11(埃尔卡皮坦):

    我假设你已经安装了 XCode、command line tools、Python 和 MySQL。

    1. 安装画中画:

      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 
    

    【讨论】:

    • 谢谢,这个解决方案也适用于 Mac OSX 10.9 :-)
    • 这对我很有用(Yosemite 公共测试版;Mysql 5;Py2.7),但我需要从下面执行 sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 命令。
    • 好答案。我的 .bash_profile 中已经有 DYLD_LIBRARY_PATH 的其他定义,所以我以这种方式添加了它export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/
    • 刚刚验证这适用于 10.10.4。此外,使用自制软件中的 mysql,不需要更改 .profile 即可完成这项工作。
    • 在用brew install mysql安装MySQL后,我就不用第二步了。
    【解决方案3】:

    通过Macports安装mysql和python,搬运工们辛苦了。

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

    应该安装你需要的东西。 (见Stack overflow for comments re mysql server

    如果你只需要连接mysql而不运行服务器,那么第一行就足够了。

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

    当需要安装复杂的库等时,通常 macports(或 fink)会提供帮助。

    仅 Python 的代码,如果可以通过 setuptools 等设置简单的 C 依赖项,但如果将两者混合使用就会变得复杂。

    【讨论】:

    • 请注意,当开始使用 MacPorts 时,请确保您的路径更喜欢 /opt/local/bin 而不是 /usr/bin,因为 MacPorts 会在 /opt/local 下安装东西。
    • 是的!如果您只需要连接到现有的 MySQL 服务器,请跳过第二行。不幸的是,由于涉及的依赖项的数量,尝试在 OS X 上将 python 与 mysql 一起使用是一种让 MacPorts 安装额外的 python 实例而不是尝试自己玩包管理器更容易的情况。
    • 附带说明,如果您收到弃用警告,以下页面有修复:bugs.launchpad.net/python-mysqldb/+bug/341943
    • 仅供参考,如果您只执行第一行(至少使用 py27-mysql),无论如何它最终都会安装 mysql5。通过下载和编译源代码。可能不是你想要的。 Grr.
    • @BenHardy - 它已全部安装,这是您想要的,也正是我的意思 - 现在 lion 和 Snow Leopard 可执行文件由 macports 集中构建,因此在大多数情况下不会进行本地编译.
    【解决方案4】:

    安装点子:

    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)]。
    • curl: (22) 请求的 URL 返回错误:404 Not Found
    • 这样做了,但用pip install mysqlclient 代替。有效!
    【解决方案5】:

    这是我在完成第 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

    【讨论】:

      【解决方案6】:

      Installing MySQL-python on mac 所述:

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

      然后测试它:

      python -c "import MySQLdb"
      

      【讨论】:

        【解决方案7】:

        刚买了一个新的 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

        • 确保您已下载 64 位版本的 MYSQL 社区。 (DMG 安装很简单)http://dev.mysql.com/downloads/mysql/

        • 设置路径如下:

          导出 PATH=$PATH:/usr/local/mysql-XXXX

          导出 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 似乎对我来说效果更好。 (我可以想到一些原因,但它们并不严格相关)。

        • 安装野兽!

          easy_install MySQL-python

        • 最后一步:

        永久添加 DYLD_LIBRARY_PATH!

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

        导出 DYLD_LIBRARY_PATH = /usr/local/mysql/lib/

        @richard-boardman,刚刚注意到您的软链接解决方案,它实际上可能与我的 PATH 解决方案所做的相同......伙计们,无论哪种方式最适合您。

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

        【讨论】:

          【解决方案8】:

          您可以尝试使用纯python pymysql:

          sudo easy_install pymysql
          

          (如果您已安装,则使用 pip。)然后,在您的代码中添加 import MySQLdb 之前:

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

          【讨论】:

            【解决方案9】:

            或者简单的尝试:

            > sudo easy_install MySQL-python
            

            如果出现如下错误:

            EnvironmentError: mysql_config not found

            ,然后运行这个

            > export PATH=$PATH:/usr/local/mysql/bin
            

            【讨论】:

              【解决方案10】:

              此答案是大约 2019 年 11 月的更新。流行的 pip 安装都不会为您提供 MacOS 10.13(以及可能的其他版本)上的工作设置。这是我使事情正常进行的一种简单方法:

              brew install mysql
              pip install mysqlclient
              

              如果您在安装 brew 时需要帮助,请访问此站点:https://brew.sh/

              【讨论】:

              • 这在 mac os x monterey 上对我有用
              【解决方案11】:

              如果您使用的是 64 位 MySQL,则在构建 mysql-python 库时使用 ARCHFLAGS 指定您的 cpu 架构即可:

              ARCHFLAGS='-arch x86_64' python setup.py build
              ARCHFLAGS='-arch x86_64' python setup.py install
              

              【讨论】:

                【解决方案12】:
                export PATH=$PATH:/usr/local/mysql/bin/
                

                应该为您解决问题,因为系统无法找到 mysql_config 文件。

                【讨论】:

                  【解决方案13】:

                  在 macos Sierra 上,这对我有用,python 由 anaconda 管理:

                  anaconda search -t conda mysql-python

                  anaconda show CEFCA/mysql-python

                  conda install --channel https://conda.anaconda.org/CEFCA mysql-python

                  与 SQLAlchemy 一起使用:

                  Python 2.7.13 |Continuum Analytics, Inc.| (默认,2016 年 12 月 20 日,23:05:08) [GCC 4.2.1 兼容 Apple LLVM 6.0 (clang-600.0.57)] 在 darwin 输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。 Anaconda 由 Continuum Analytics 提供给您。 请查看:http://continuum.io/thankshttps://anaconda.org

                  >>> 从 sqlalchemy 导入 *

                  >>>dbengine = create_engine('mysql://....')

                  【讨论】:

                    【解决方案14】:

                    我遇到了这个问题,发现mysqlclient需要知道在哪里可以找到openssl,而OSX默认隐藏了这个。

                    使用brew info openssl 找到openssl,然后将openssl bin 的路径添加到PATH:

                    export PATH="/usr/local/opt/openssl/bin:$PATH"
                    

                    我建议将其添加到您的 .zshrc 或 .bashrc 中,这样您以后就不必担心它了。然后,导出该变量(可能需要关闭和重新打开 bash 会话),再添加两个 env 变量:

                    # in terminal
                    export LDFLAGS="-L/usr/local/opt/openssl/lib"
                    export CPPFLAGS="-I/usr/local/opt/openssl/include"
                    

                    然后,最后,运行:

                    pipenv install mysqlclient
                    

                    它应该安装得很好。

                    来源:https://medium.com/@shandou/pipenv-install-mysqlclient-on-macosx-7c253b0112f2

                    【讨论】:

                      猜你喜欢
                      • 2011-07-28
                      • 2014-11-19
                      • 2013-04-17
                      • 2012-09-18
                      • 2011-08-24
                      • 1970-01-01
                      • 2011-11-29
                      相关资源
                      最近更新 更多