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

导入pyarrow后pyodbc无法连接MySQL ODBC驱动问题求助

导入pyarrow后pyodbc无法找到MySQL ODBC驱动文件

我在一个预装了MySQL ODBC驱动、unixODBC及相关Python库的Docker容器中遇到了奇怪的问题:

正常场景:未导入pyarrow时连接正常

在全新Python进程中,直接使用pyodbc可以正常连接MySQL,isql也能正常工作:

sh-4.4# python
Python 3.8.16 (default, May 31 2023, 12:44:21)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-18)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyodbc
>>> pyodbc.connect("DRIVER=MySQL ODBC 8.1 ANSI Driver;SERVER=host.docker.internal;PORT=3306;UID=root;PWD=shh")
<pyodbc.Connection object at 0x7f6fd94dac70>

异常场景:导入pyarrow后连接失败

如果先导入pyarrow再尝试连接,会直接报错找不到驱动文件:

sh-4.4# python
Python 3.8.16 (default, May 31 2023, 12:44:21)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-18)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyarrow
>>> import pyodbc
>>> pyodbc.connect("DRIVER=MySQL ODBC 8.1 ANSI Driver;SERVER=host.docker.internal;PORT=3306;UID=root;PWD=shh")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/usr/lib64/libmyodbc8a.so' : file not found (0) (SQLDriverConnect)")

即使直接指定驱动的绝对路径,错误依然相同:

sh-4.4# python
Python 3.8.16 (default, May 31 2023, 12:44:21)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-18)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyarrow
>>> import pyodbc
>>> pyodbc.connect("DRIVER=/usr/lib64/libmyodbc8a.so;SERVER=host.docker.internal;PORT=3306;UID=root;PWD=shh")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/usr/lib64/libmyodbc8a.so' : file not found (0) (SQLDriverConnect)")

已做的排查工作

  • 检查驱动依赖:用lddtree检查/usr/lib64/libmyodbc8a.so的所有依赖,确认所有依赖库都存在且路径正确:
>>> import os
>>> os.system('./lddtree.sh /usr/lib64/libmyodbc8a.so')
libmyodbc8a.so => /usr/lib64/libmyodbc8a.soreadelf: /usr/lib64/libmyodbc8a.so: Warning: Section '.interp' was not dumped because it does not exist!
 (interpreter => none)
readelf: /usr/lib64/libmyodbc8a.so: Warning: Section '.interp' was not dumped because it does not exist!
    libpthread.so.0 => /lib64/libpthread.so.0
    libdl.so.2 => /lib64/libdl.so.2
    libssl.so.1.1 => /lib64/libssl.so.1.1
        libz.so.1 => /lib64/libz.so.1
    libcrypto.so.1.1 => /lib64/libcrypto.so.1.1
    libresolv.so.2 => /lib64/libresolv.so.2
    librt.so.1 => /lib64/librt.so.1
    libm.so.6 => /lib64/libm.so.6
    libodbcinst.so.2 => /lib64/libodbcinst.so.2
        libltdl.so.7 => /lib64/libltdl.so.7
    libstdc++.so.6 => /lib64/libstdc++.so.6
    libgcc_s.so.1 => /lib64/libgcc_s.so.1
    libc.so.6 => /lib64/libc.so.6
    ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
0
  • 升级依赖库:已将pyarrow(13.0.0)和pyodbc(4.0.39)升级到最新版本,问题依然存在。
  • 对比其他驱动:容器中其他ODBC驱动未出现此问题。
  • 参考类似问题:曾见过导入protobuf时出现类似错误,旧版pyarrow包含protobuf头文件但新版已移除,不确定是否相关。

我推测pyarrow在初始化过程中修改了某些环境变量或加载器配置,但不知道具体该从哪些方向深入排查,求进一步的调试建议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:37:27