【问题标题】:libmysqlclient.18.dylib image not found when using MySQL from Django on OS X在 OS X 上从 Django 使用 MySQL 时找不到 libmysqlclient.18.dylib 图像
【发布时间】:2012-04-12 06:18:22
【问题描述】:

我开始学习 Python/Django 并遇到了我的第一个障碍。尝试在settings.py 中设置我的数据库时,内部服务器失败并显示:

File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 16, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Users/rob/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/rob/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so
Reason: image not found

我找到了很多解决方案,主要涉及明确定义我的 DYLD_LIBRARY_PATH 值,但这对我不起作用。 MysQL-Python 已安装 (v1.2.3)。

知道我可能需要做些什么来解决这个问题吗?

谢谢。

更新

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',  # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'django_tutorial',                      # Or path to database file if using sqlite3.
    'USER': 'root',                      # Not used with sqlite3.
    'PASSWORD': '',                  # Not used with sqlite3.
    'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
  }
}

【问题讨论】:

  • 对于 OSX,作为一般做法,我建议您使用来自 ActiveState 的 PyPM 包管理器和存储库。我用过:'sudo pypm install mysql-python'并且(几乎)从来没有遇到过包问题
  • 如果您只是想学习 Django,那么从使用 SQLite 开始可能会更有优势。我在 SQLite 中启动所有项目,然后根据需要将它们迁移到真实数据库。
  • @Mihai Oprea - 我使用了 pip 和 easy_install 来检查 MySQL 包。 MySQL 本身在同一台机器上的 Ruby 和 PHP 开发人员都可以正常工作。
  • @TK Kocheran - 也许是这样,但我已经熟悉 MySQL 并且知道我会在野外使用它或 PGSQL,所以我想我现在不妨克服成长的痛苦。 :-)

标签: python mysql django


【解决方案1】:

确保您拥有的不仅仅是 MySql-Python,而是实际的 MySql。 MySQL-python 正在尝试加载 mysql 库,该库应该位于 /usr/local/mysql-VERSION/lib 之类的位置。

尝试运行

mdfind libmysqlclient

在命令行上。扫描这些结果,如果你没有看到它丢失的文件 (libmysqlclient.18.dylib),那么你可能没有正确安装 mysql。

【讨论】:

  • MySQL 对于 Ruby/PHP 开发人员运行良好,并且该命令在我的 mysql/lib 路径中显示该库。谢谢。
【解决方案2】:

你能告诉我们你的 settings.py 代码吗? 您还可以尝试编辑 mysql_config 文件的路径以指向 /usr/local/mysql/bin/mysql_config,如本文中更详细讨论的那样: http://dakrauth.com/blog/entry/python-and-django-setup-mac-os-x-leopard/

【讨论】:

  • 我已将我的数据库设置添加到原始问题中。谢谢。
【解决方案3】:

从您的 cmets 看来,libmysqlclient dylib 似乎是使用非绝对库名称路径安装的。这与 OS X 上的标准做法相反,在这方面与大多数其他 Unix-y 系统不同。您应该能够永久通过使用 install_name_tool 修改 .so 文件中的路径来解决问题(至少在下次升级之前),或者您可以通过确保您的 Django 实例是使用定义的以下环境变量运行:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib

您还可能可以通过在/usr/local/lib 中创建指向/usr/local/mysql/lib 中dylib 的符号链接来使其工作,因为/usr/local/lib 位于默认的动态加载搜索路径上,所以(未经测试!)类似:

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

更好的长期解决方案是不使用Python import MySQLdb error - Mac 10.6 中建议的损坏的 MySQL 客户端安装。

【讨论】:

  • 设置库路径似乎对我不起作用。我对使用install_name_tool 犹豫不决,因为它听起来……具有破坏性,但如果我想使用我现有的 MySQL 二进制安装(这会更好),这可能是我唯一的希望。谢谢。
  • 符号链接有效(并且对我的破坏性较小),所以我现在就是这样滚动的。谢谢你让我克服这个特殊的困难。
  • 适用于 --> sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
  • 保存了我的@$$。谢谢!
  • 布拉瓦回答。节省我的时间。
【解决方案4】:

我没有足够的声誉来评论 Ned Deily 上面的回答 :),但是在修复错字之后,环境变量方法对我有用;应该是:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib

如果你走那条路,我会建议两件事;确保你不使用任何其他 DYLD_LIBRARY_PATH 设置

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

并将其放入您的 .bashrc 文件中,这样您就不必记住在每个终端会话中设置它。

与符号链接选项相比,此方法的好处是它将允许找到所有 mysql dylib 文件,而不仅仅是您专门符号链接的文件。

【讨论】:

    【解决方案5】:

    使用homebrew 安装mysql,这对我有用:

    $ mdfind libmysqlclient
    /usr/local/Cellar/mysql/5.7.9/lib/libmysqlclient.20.dylib
    /usr/local/Cellar/mysql/5.7.9/lib/libmysqlclient.a
    /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib
    /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.a
    /usr/local/Cellar/mysql/5.6.26/lib/libmysqlclient.18.dylib
    /usr/local/Cellar/mysql/5.6.26/lib/libmysqlclient.a
    
    $ sudo ln -s /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
    

    【讨论】:

      【解决方案6】:

      你可能最近升级了 mysql。当我使用 brew 将 MySql 从 5.6 升级到 5.7 时,我遇到了这个问题。这肯定破坏了一些库,但是将 mysql 重新链接回 5.6 解决了这个问题。 所以首先看看你以前使用的 mysql 版本: brew info mysql 并在使用 brew switch mysql 5.6.22 命令切换回该版本之后。

      【讨论】:

        猜你喜欢
        • 2011-09-29
        • 2012-05-20
        • 1970-01-01
        • 1970-01-01
        • 2013-08-25
        • 2011-09-17
        • 1970-01-01
        • 2016-02-22
        • 2020-08-22
        相关资源
        最近更新 更多