Python mysqldb:未加载库:libmysqlclient.18.dylib

2025-02-28 08:22:00
admin
原创
72
摘要:问题描述:我刚刚在 mac os 10.6 上编译并安装了 mysqldb for python 2.7。我创建了一个简单的测试文件,导入import MySQLdb as mysql 首先,这个命令有红色下划线,信息告诉我“未解析导入”。然后我尝试运行以下简单的 Python 代码import MySQLd...

问题描述:

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

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>
    
amespace 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 版本在哪里可以找到它。我在哪里设置它?


解决方案 1:

我通过创建指向该库的符号链接解决了该问题。即

实际的图书馆位于

/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/。您可以按照以下说明禁用 SIP ,但您可以改为在 中创建链接/usr/local/lib/

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

解决方案 2:

我首选的方法是实际修复库,而不是摆弄环境变量,因为环境变量可能在范围内,也可能不在范围内,具体取决于应用程序的运行方式。这实际上是一个相当简单的过程。

首先,查看错误输出以查看有问题的 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)

解决方案 3:

我发现除了创建符号链接之外,还有另一种解决方案。

您将 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

就是这样。

解决方案 4:

就我而言,我在使用 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 文件位置的方法。

解决方案 5:

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

另外与 yoshisurfs 的回答相比,为了方便使用,大多数时候安装 mysql 时,应该将 mysql 目录重命名为 mysql,而不是整个文件名。

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

解决方案 6:

我在几个虚拟环境中遇到过这个问题。

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

两次都有效。

解决方案 7:

在 pydev eclipse 插件中,您可能需要设置 DYLD 的环境变量。路径可以按如下所示设置

在雪豹上安装 mysqldb

解决方案 8:

对于使用自制软件的用户,你可以使用以下方法修复此问题:

$ brew link mysql

解决方案 9:

就我而言,在 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}"

解决方案 10:

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

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

解决方案 11:

在新的 El Capitan 安装中,SIP(无根阻止访问 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 发行版中提供,并且可能会在开发者测试版结束前消失。请密切关注未来开发者测试版的发行说明。

解决方案 12:

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

我的情况略有不同。我的 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 对我来说不是一个选择。

解决方案 13:

转到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 && make install make install之后,您将在/usr/local下获得一个名为mysql的目录。它包含您需要的所有头文件和库。转到此目录,并将头文件和库复制到相应的位置。

解决方案 14:

你可以尝试:

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`

解决方案 15:

注意 macOS 上 MySQL Connector/C 的 bug(我当前的版本是 10.13.2),修复 mysql_config 并重新安装 mysqlclient 或 MySQL-python,以下是详细信息

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2941  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1803  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色。然而,在实际运行中,资源冲突是经常会遇到的难题。资源冲突可能导致项目进度延迟、成本增加以及产品质量下降等一系列问题,严重影响企业的效益与竞争力。因此,如何有效应对PLM系统中的资源冲突,成为众多企业关注的焦点。接下来,我们将详细探讨5...
plm项目管理系统   31  
  敏捷项目管理与产品生命周期管理(PLM)的融合,正成为企业在复杂多变的市场环境中提升研发效率、增强竞争力的关键举措。随着技术的飞速发展和市场需求的快速更迭,传统的研发流程面临着诸多挑战,而将敏捷项目管理理念融入PLM,有望在2025年实现研发流程的深度优化,为企业创造更大的价值。理解敏捷项目管理与PLM的核心概念敏捷项...
plm项目   31  
  模块化设计在现代产品开发中扮演着至关重要的角色,它能够提升产品开发效率、降低成本、增强产品的可维护性与可扩展性。而产品生命周期管理(PLM)系统作为整合产品全生命周期信息的关键平台,对模块化设计有着强大的支持能力。随着技术的不断发展,到 2025 年,PLM 系统在支持模块化设计方面将有一系列令人瞩目的技术实践。数字化...
plm软件   28  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用