You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.11中导入Pandas导致pyodbc.connect连接失败求助

问题解决:先导入Pandas后PyODBC无法找到MySQL ODBC驱动

问题场景

Ubuntu 22.04 + Python 3.11环境下,单独导入pyodbc==5.0.1可正常连接本地MySQL;但先导入pandas==2.1.2再导入pyodbc时,抛出驱动找不到的错误:

'01000', '[01000] [unixODBC][Driver Manager]Can't open lib '/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8w.so' : file not found (0) (SQLDriverConnect)'

旧环境(Ubuntu 20.04 + Python 3.10 + pandas1.5.3 + pyodbc5.0.1)可正常运行,已尝试调整导入顺序、降级Pandas、切换Python 3.10、更换libmyodbc8驱动版本,均未解决。

可行解决方案

1. 排查环境变量被Pandas修改的情况

Pandas导入时可能会修改动态链接库搜索路径(LD_LIBRARY_PATH)或ODBC相关环境变量,导致驱动无法被找到。分别运行两段代码对比输出:

单独导入PyODBC时的环境变量

import os
import pyodbc

print("LD_LIBRARY_PATH:", os.environ.get('LD_LIBRARY_PATH'))
print("ODBCINI:", os.environ.get('ODBCINI'))
print("ODBCSYSINI:", os.environ.get('ODBCSYSINI'))

先导入Pandas再导入PyODBC时的环境变量

import os
import pandas
import pyodbc

print("LD_LIBRARY_PATH:", os.environ.get('LD_LIBRARY_PATH'))
print("ODBCINI:", os.environ.get('ODBCINI'))
print("ODBCSYSINI:", os.environ.get('ODBCSYSINI'))

如果发现LD_LIBRARY_PATH被修改,可在导入Pandas前手动设置正确的路径:

import os
os.environ['LD_LIBRARY_PATH'] = '/usr/lib/x86_64-linux-gnu/odbc:' + os.environ.get('LD_LIBRARY_PATH', '')
import pandas
import pyodbc

2. 连接字符串中直接指定驱动绝对路径

放弃使用驱动名称,直接在连接字符串里写驱动的绝对路径,同时注意报错中的libmyodbc8w.so是宽字符版本,若系统中只有非宽字符版(libmyodbc8.so),可直接替换:

conn_str = (
    "DRIVER=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8.so;"
    "SERVER=localhost;"
    "DATABASE=your_database;"
    "UID=your_username;"
    "PWD=your_password;"
)
import pyodbc
conn = pyodbc.connect(conn_str)

如果系统中确实没有libmyodbc8w.so,可创建软链接指向现有驱动:

sudo ln -s /usr/lib/x86_64-linux-gnu/odbc/libmyodbc8.so /usr/lib/x86_64-linux-gnu/odbc/libmyodbc8w.so

3. 检查Pandas与系统库的冲突

Ubuntu 22.04的libgfortran版本为12,而Pandas 2.1.2依赖的库可能与系统版本存在冲突,导致动态链接器加载异常。用ldd命令检查依赖:

# 检查Pandas核心库依赖
ldd $(python -c "import pandas; print(pandas.__file__)")/../_libs/libpandas.so
# 检查PyODBC依赖
ldd $(python -c "import pyodbc; print(pyodbc.__file__)")

若发现缺失或冲突的库,可手动安装对应版本的依赖包,或在导入Pandas前设置LD_PRELOAD加载正确的库:

import os
os.environ['LD_PRELOAD'] = '/usr/lib/x86_64-linux-gnu/libgfortran.so.5'  # 根据实际缺失的库调整
import pandas
import pyodbc

4. 手动通过DriverManager加载驱动

绕过系统默认的ODBC驱动管理器,直接用PyODBC的DriverManager加载指定驱动:

import pyodbc
# 直接加载驱动文件
driver = pyodbc.DriverManager('/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8.so')
# 建立连接
conn = driver.connect('SERVER=localhost;DATABASE=your_database;UID=your_username;PWD=your_password')

内容的提问来源于stack exchange,提问作者Peter Southland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:43:20