MySQLDB install Error:libmysqlclient_r.so.16: cannot open shared object

本文介绍了解决Python连接MySQL时因动态库搜索路径问题导致的错误。主要原因是MySQL安装路径未包含在默认搜索路径中。文章提供了修改配置文件并运行ldconfig命令的解决方案。

python连接MySql时出现的Error.

出现原因:

由于 /usr/local/lib/mysql 不在动态库默认搜索路径列表内,而mysql又装在此位置,生成的libmysqlclient_r.so.X 就不能被搜索到。


解决方案:

/usr/local/lib/mysql这个路径写进/etc/ld.so.conf.d/mysql.conf 然后再ldconfig下即可

echo "/usr/local/lib/mysql/ > /etc/ld.so.conf.d/mysql.conf ldconfig


关于/ld.so.conf.d 和 ldconfig

默认动态库搜索路径为/lib 和 /usr/lib , 和/etc/ld.so.conf.d内所包含的目录,然后通过ldconfig来产生ld.so所需的缓存文件,缓存文件默认在/etc/ld.so.cache文件内。此文件包含了已经排好序的动态库列表。

你可以使用ldconfig -p打印出当前cache所保存的所有共享库的名字。

^_^[root@:~]#ldconfig -p 1035 libs found in cache `/etc/ld.so.cache' libz.so.1 (libc6,x86-64) => /usr/lib64/libz.so.1 libz.so.1 (libc6) => /usr/lib/libz.so.1 libz.so (libc6,x86-64) => /usr/lib64/libz.so libz.so (libc6) => /usr/lib/libz.so libxslt.so.1 (libc6,x86-64) => /usr/lib64/libxslt.so.1 libxslt.so.1 (libc6) => /usr/lib/libxslt.so.1 libxslt.so (libc6,x86-64) => /usr/lib64/libxslt.so libxml2.so.2 (libc6,x86-64) => /usr/lib64/libxml2.so.2 libxml2.so.2 (libc6) => /usr/lib/libxml2.so.2 libxml2.so (libc6,x86-64) => /usr/lib64/libxml2.so libxml2.so (libc6) => /usr/lib/libxml2.so libxmlsec1.so.1 (libc6,x86-64) => /usr/lib64/lib

通过 -v 参数显示扫描的动态库目录

^_^[root@:~]#ldconfig -v ldconfig: Path `/usr/lib' given more than once /usr/lib: libcupsimage.so.2 -> libcupsimage.so.2 libbdevid.so.5.1.19.6 -> libbdevi


(mg_env) ubuntu@ubuntu-64:~$ pip install mysqlclient Collecting mysqlclient Using cached mysqlclient-2.2.7.tar.gz (91 kB) Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Building wheels for collected packages: mysqlclient Building wheel for mysqlclient (pyproject.toml) ... error error: subprocess-exited-with-error × Building wheel for mysqlclient (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [41 lines of output] Trying pkg-config --exists mysqlclient # Options for building extension module: extra_compile_args: ['-I/usr/include/mysql', '-std=c99'] extra_link_args: ['-lmysqlclient'] define_macros: [('version_info', (2, 2, 7, 'final', 0)), ('__version__', '2.2.7')] running bdist_wheel running build running build_py creating build/lib.linux-x86_64-cpython-38/MySQLdb copying src/MySQLdb/__init__.py -> build/lib.linux-x86_64-cpython-38/MySQLdb copying src/MySQLdb/times.py -> build/lib.linux-x86_64-cpython-38/MySQLdb copying src/MySQLdb/_exceptions.py -> build/lib.linux-x86_64-cpython-38/MySQLdb copying src/MySQLdb/converters.py -> build/lib.linux-x86_64-cpython-38/MySQLdb copying src/MySQLdb/cursors.py -> build/lib.linux-x86_64-cpython-38/MySQLdb copying src/MySQLdb/connections.py -> build/lib.linux-x86_64-cpython-38/MySQLdb copying src/MySQLdb/release.py -> build/lib.linux-x86_64-cpython-38/MySQLdb creating build/lib.linux-x86_64-cpython-38/MySQLdb/constants copying src/MySQLdb/constants/__init__.py -> build/lib.linux-x86_64-cpython-38/MySQLdb/constants copying src/MySQLdb/constants/FLAG.py -> build/lib.linux-x86_64-cpython-38/MySQLdb/constants copying src/MySQLdb/constants/FIELD_TYPE.py -> build/lib.linux-x86_64-cpython-38/MySQLdb/constants copying src/MySQLdb/constants/ER.py -> build/lib.linux-x86_64-cpython-38/MySQLdb/constants copying src/MySQLdb/constants/CLIENT.py -> build/lib.linux-x86_64-cpython-38/MySQLdb/constants copying src/MySQLdb/constants/CR.py -> build/lib.linux-x86_64-cpython-38/MySQLdb/constants running egg_info writing src/mysqlclient.egg-info/PKG-INFO writing dependency_links to src/mysqlclient.egg-info/dependency_links.txt writing top-level names to src/mysqlclient.egg-info/top_level.txt reading manifest file 'src/mysqlclient.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' adding license file 'LICENSE' writing manifest file 'src/mysqlclient.egg-info/SOURCES.txt' copying src/MySQLdb/_mysql.c -> build/lib.linux-x86_64-cpython-38/MySQLdb running build_ext building 'MySQLdb._mysql' extension creating build/temp.linux-x86_64-cpython-38/src/MySQLdb x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -fPIC "-Dversion_info=(2, 2, 7, 'final', 0)" -D__version__=2.2.7 -I/home/ubuntu/.virtualenvs/mg_env/include -I/usr/include/python3.8 -c src/MySQLdb/_mysql.c -o build/temp.linux-x86_64-cpython-38/src/MySQLdb/_mysql.o -I/usr/include/mysql -std=c99 src/MySQLdb/_mysql.c:52:10: fatal error: Python.h: 没有那个文件或目录 52 | #include "Python.h" | ^~~~~~~~~~ compilation terminated. error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1 [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for mysqlclient Failed to build mysqlclient ERROR: Failed to build installable wheels for some pyproject.toml based projects (mysqlclient) 还是显示这个错误
05-13
(django) [root@iZ7vhr6bkd1v9kZ django]# python manage.py runserver Watching for file changes with StatReloader Exception in thread django-main-thread: Traceback (most recent call last): File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/db/backends/mysql/base.py", line 15, in <module> import MySQLdb as Database File "/root/.virtualenvs/django/lib/python3.8/site-packages/MySQLdb/__init__.py", line 17, in <module> from . import _mysql ImportError: libmysqlclient.so.20: cannot open shared object file: No such file or directory The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner self.run() File "/usr/local/lib/python3.8/threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/utils/autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 125, in inner_run autoreload.raise_last_exception() File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/utils/autoreload.py", line 87, in raise_last_exception raise _exception[1] File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/core/management/__init__.py", line 394, in execute autoreload.check_errors(django.setup)() File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/utils/autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/apps/registry.py", line 116, in populate app_config.import_models() File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/apps/config.py", line 269, in import_models self.models_module = import_module(models_module_name) File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1014, in _gcd_import File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/db/models/base.py", line 371, in add_to_class value.contribute_to_class(cls, name) File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/db/models/options.py", line 243, in contribute_to_class self.db_table, connection.ops.max_name_length() File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/utils/connection.py", line 15, in __getattr__ return getattr(self._connections[self._alias], item) File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/utils/connection.py", line 62, in __getitem__ conn = self.create_connection(alias) File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/db/utils.py", line 193, in create_connection backend = load_backend(db["ENGINE"]) File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/db/utils.py", line 113, in load_backend return import_module("%s.base" % backend_name) File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "/root/.virtualenvs/django/lib/python3.8/site-packages/django/db/backends/mysql/base.py", line 17, in <module> raise ImproperlyConfigured( django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient?
03-26
该错误表明系统中 `libmysqlclient.so.18` 的版本与 `MySQLdb/_mysql.so` 所需的 `libmysqlclient_16` 版本不匹配,可尝试以下解决方法: ### 1. 确认 `libmysqlclient.so.18` 版本 使用以下命令查看 `libmysqlclient.so.18` 的版本信息: ```bash ldd /lib64/libmysqlclient.so.18 ``` ### 2. 查找合适的 `libmysqlclient` 库 可以尝试查找系统中是否存在 `libmysqlclient_16` 版本的库文件。使用以下命令进行查找: ```bash find / -name "libmysqlclient*" ``` ### 3. 安装或更新 `libmysqlclient` 库 如果系统中没有合适的版本,需要安装或更新 `libmysqlclient` 库。可以使用包管理器来完成,以下是不同系统的示例: #### CentOS/RHEL ```bash yum install mysql-devel ``` #### Ubuntu/Debian ```bash apt-get install libmysqlclient-dev ``` ### 4. 创建软链接 如果已经找到了 `libmysqlclient_16` 版本的库文件,可以创建软链接指向 `libmysqlclient.so.18`: ```bash ln -s /path/to/libmysqlclient_16.so /lib64/libmysqlclient.so.18 ``` 请将 `/path/to/libmysqlclient_16.so` 替换为实际的 `libmysqlclient_16` 库文件路径。 ### 5. 更新动态链接库缓存 在创建或修改软链接后,需要更新动态链接库缓存: ```bash ldconfig ``` ### 6. 检查 Python 虚拟环境 确保 Python 虚拟环境中 `MySQLdb` 库与系统中的 `libmysqlclient` 库版本兼容。可以尝试重新安装 `MySQLdb`: ```bash pip uninstall MySQLdb pip install MySQLdb ``` 通过以上步骤,应该可以解决 `ImportError: /lib64/libmysqlclient.so.18: version 'libmysqlclient_16' not found` 错误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值