【问题标题】:Python mysqldb: Library not loaded: libmysqlclient.18.dylibPython mysqldb:未加载库:libmysqlclient.18.dylib
【发布时间】:2011-09-17 00:28:09
【问题描述】:

我刚刚在我的 mac os 10.6 上为 python 2.7 编译并安装了 mysqldb。我创建了一个导入的简单测试文件

import MySQLdb as mysql

首先,此命令带有红色下划线,并且信息告诉我“未解决的导入”。然后我尝试运行以下简单的python代码

import MySQLdb as mysql

def main():
    conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" )

if __name__ == '__main__'():
    main()

执行它时,我收到以下错误消息

Traceback (most recent call last):
  File "/path/to/project/Python/src/cvdv/TestMySQLdb.py", line 4, in <module>
    import MySQLdb as mysql
  File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in <module>
    \namespace cvdv
  File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so
  Reason: image not found

我的问题可能有什么解决方案?

编辑: 实际上我发现该库位于 /usr/local/mysql/lib 中。所以我需要告诉我的 pydev eclipse 版本在哪里可以找到它。我在哪里设置?

【问题讨论】:

    标签: python mysql-python


    【解决方案1】:

    关于 macOS 上 MySQL Connector/C 的 bug(我当前版本是 10.13.2),修复 mysql_config 并重新安装 mysqlclient 或 MySQL-python,here is the detail

    【讨论】:

      【解决方案2】:

      当你在 El Capitan 时,会出现错误:ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted 需要关闭“系统完整性保护”。

      首先,重启并按住cmd + R进入Recovery模式,然后启动终端并输入命令:csrutil disable,现在您可以重启并重试。

      【讨论】:

      • 另一种方法可以将文件 libmysqlclient.18.dylib 移动到 /usr/local/lib 并将路径 PATH=/usr/local/lib:$PATH 添加到 bash_profile。它对我有用。
      【解决方案3】:

      你可以试试:

      sudo install_name_tool -change libmysqlclient.18.dylib /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so`
      

      【讨论】:

        【解决方案4】:

        我在几个虚拟环境中遇到过这种情况。

        pip uninstall MySQL-python
        pip install -U MySQL-python
        

        两次都工作过。

        【讨论】:

        • 也为我工作
        【解决方案5】:

        我通过创建到库的符号链接解决了这个问题。即

        实际的库位于

        /usr/local/mysql/lib
        

        然后我在

        中创建了一个符号链接
        /usr/lib
        

        使用命令:

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

        这样我就有了以下映射:

        ls -l libmysqlclient.18.dylib 
        lrwxr-xr-x  1 root  wheel  44 16 Jul 14:01 libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib
        

        就是这样。之后一切正常。

        编辑:

        请注意,自 MacOS El Capitan 以来,系统完整性保护(SIP,也称为“无根”)将阻止您在 /usr/lib/ 中创建链接。 您可以通过关注these instructions 来禁用 SIP,但您可以改为在/usr/local/lib/ 中创建链接:

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

        【讨论】:

        • sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
        • 我已经通过 MacPorts 安装了 mysql55 并解决了这个错误:sudo ln -s mysql/libmysqlclient.18.dylib /opt/local/lib/mysql55/libmysqlclient.18.dylib
        • 在 Mavericks 删除了我的旧符号链接后,我不得不从一个稍微不同的位置进行符号链接:sudo ln -s /usr/local/mysql-5.5.29-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
        • 如果您在 El Capitan 上运行,则必须禁用 SIP:forums.developer.apple.com/thread/7935
        • 全新安装 El Capitan 后,我发现您不需要为此提示禁用 SIP。
        【解决方案6】:

        转到http://dev.mysql.com/downloads/connector/c/ 并下载 MySQL Connector/C。 拿到包后,新建一个目录'mysql',解压mysql目录下的Mysql Connector文件,然后在mysql下,新建一个空目录'build'。我们将使用'build'来构建MySQL Connector/C。 cd build && cmake ../your-MySQL-Connector-source-dir 制作 && 制作安装 make install 后,您将在 /usr/local 下获得一个名为 mysql 的目录。它包含您需要的所有头文件和库。转到此目录,并将头文件和库复制到相应的位置。

        【讨论】:

          【解决方案7】:

          我发现这个问题有另一种解决方案,而不是创建符号链接。

          您将 libmysqlclient.18.dylib 所在目录的路径设置为 DYLD_LIBRARY_PATH 环境变量。我所做的是在我的 .bash_profile 中添加以下行:

          export DYLD_LIBRARY_PATH=/usr/local/mysql-5.5.15-osx10.6-x86/lib/:$DYLD_LIBRARY_PATH
          

          就是这样。

          【讨论】:

          • 在 /usr/local/mysql 也有一个符号链接指向已安装的版本,所以我建议将您的行更改为:export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/:$DYLD_LIBRARY_PATH
          【解决方案8】:

          就我而言,在 El Capitan (OSX 10.11) 中,我必须在 ~/.bash_profile 中进行以下操作

          export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:${DYLD_LIBRARY_PATH}"
          export PATH="/usr/local/mysql/lib:${PATH}"
          

          【讨论】:

            【解决方案9】:

            在新的 El Capitan 安装中,默认情况下 SIP(​​rootless 阻止访问 usr/lib/)处于打开状态,除非您处于恢复模式,否则您无法创建符号链接。正如@yannisxu 所说,您可以禁用 SIP 并将您的符号链接到 /usr/lib/local,这将起作用。

            您可以在 MAC OSX El Capitan 上使用以下命令,而不是关闭 SIP:

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

            曾经有一个选项可以让您以 root 身份登录,这可以禁用 SIP,但在现已过时的最终版本中,您可以在此处阅读更多信息:https://forums.developer.apple.com/thread/4686

            问题:

            Developer Beta 1 中有一个可用的 nvram boot-args 命令,它可以在以 root 权限运行时禁用 SIP:

            nvram boot-args="rootless=0"
            

            这个禁用 SIP 的选项是否也可以在 El Capitan 发行版中使用?或者这仅适用于开发者构建?

            答案:

            此 nvram boot-args 命令将消失。它在 El Capitan 发行版中不可用,并且可能在开发者测试版结束前消失。请密切关注未来开发者测试版的发行说明。

            【讨论】:

              【解决方案10】:

              对于那些使用自制软件的人,您可以使用以下方法解决此问题:

              $ brew link mysql
              

              【讨论】:

              • 这对我有用,它创建了一个这样的链接:/usr/local/lib/libmysqlclient.18.dylib -> /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient .18.dylib
              【解决方案11】:

              我遇到了这个问题,我花了一段时间才弄清楚如何解决这个问题。

              我的情况略有不同。我的 MySQL 服务器的版本是 5.1.x。不知何故,我将我的 MySQL-python 从 1.2.3 升级到了 1.2.5。从那以后我一直遇到这个问题,我添加了以下软链接。

              libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib
              

              事实证明,对于 MySQL 5.1.x,没有 libmysqlclient.18.dylib,只有 libmysqlclient.16.dylib。您可以通过将 MySQL-python 降级到 1.2.3 或将 MySQL 服务器升级到 5.6.x 来解决此问题(我还没有尝试过 5.5.x。)

              我将库降级到 1.2.3,因为升级 MySQL 不适合我。

              【讨论】:

                【解决方案12】:

                就我而言,我遇到了 Mac OS X 10.9 Mavericks 的错误。我直接从 DMG 的 Oracle/MySQL 网站安装了 MySQL Community Server。

                我需要做的就是将 lib 文件符号链接到 /usr/local/lib 目录。

                mkdir -p /usr/local/lib   
                ln -s /usr/local/mysql/lib/libmysql* /usr/local/lib
                

                奖励:如果您也在运行 Mac OS X,那么有一个很棒的工具可以找到像 libmysqlclient.18.dylib 文件 http://apps.tempel.org/FindAnyFile 这样的文件。这就是我最初找到 dylib 文件位置的方式。

                【讨论】:

                • 我必须创建/usr/local/lib 目录,但工作起来很神奇!
                【解决方案13】:

                我发现将它放在您的 .profile 或 .bashrc(无论您使用哪个)中是最简单的方法,与在源文件中保留路径相比,符号链接很混乱。

                同样与 yoshisurfs 的回答相比,大多数情况下,安装 mysql 时,mysql 目录应该重命名为 mysql,而不是整个文件名,以便于使用。

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

                【讨论】:

                • 这似乎是一个非常理智和简单的答案。对我来说效果很好 - 谢谢!
                【解决方案14】:

                我的首选方法是实际修复库,而不是根据应用程序的运行方式使用可能或可能不在范围内的环境变量。这实际上是一个相当简单的过程。

                首先,查看错误输出,看看有问题的python模块在哪里:

                ImportError: dlopen(/Library/Python/2.7/site-packages/_mysql.so, 2): 库未加载:libmysqlclient.18.dylib 引用自:/Library/Python/2.7/site-packages/_mysql.so 原因:找不到图片

                好的,所以有问题的文件是 /Library/Python/2.7/site-packages/_mysql.so

                接下来,找出 _mysql.so 认为它应该在哪里找到 libmysqlclient.18.dylib:

                % otool -L /Library/Python/2.7/site-packages/_mysql.so
                /Library/Python/2.7/site-packages/_mysql.so:
                    libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
                    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
                

                所以,它正在寻找没有路径信息的 libmysqlclient.18.dylib,让我们修复它:

                % sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Python/2.7/site-packages/_mysql.so
                

                现在 _mysql.so 知道库的完整路径并且一切正常,无论环境变量如何。

                % otool -L /Library/Python/2.7/site-packages/_mysql.so                                                                                           
                /Library/Python/2.7/site-packages/_mysql.so:
                    /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
                    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
                

                【讨论】:

                • 这难道不是一个更好的解决方案,所以它可以用所有 virtualenvs 修复它吗? sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib $VIRTUAL_ENV/lib/python2.7/site-packages/_mysql.so
                • @BradRuderman 我想重要的是要清楚,当你运行你给出的命令时,你只修复一个 virtualenv - 你当前的一个。此外,并非每个人都(对他们不利)在 virtualenv 中运行,因此命令行不会像发布的那样是通用的解决方案。
                • 重要说明给出的示例是修复全局 python/mysql,您需要在每个虚拟环境中修复它。如果你像我一样,你就在他们所在的位置 _mysql.so 那是重要的一步。
                • 这适用于安装在 VirtualEnvironments 中的 _mysql.so,并且不需要在 El Capitan 中禁用 SIP。
                • 感谢@Caleb 的解释 :) :) (Y)
                【解决方案15】:

                在 pydev eclipse 插件中,您可能需要为 DYLD 设置环境变量。路径可以设置如图

                Install mysqldb on snow leopard

                【讨论】:

                  猜你喜欢
                  • 2017-04-15
                  • 1970-01-01
                  • 2012-05-20
                  • 1970-01-01
                  • 2016-02-19
                  • 2016-01-05
                  • 1970-01-01
                  • 2020-01-25
                  • 2013-10-23
                  相关资源
                  最近更新 更多