通过Anaconda运行Jupyter时pyodbc找不到ODBC Driver 17 for SQL Server,其他环境正常
解决方案
问题根源
Anaconda虚拟环境会默认隔离系统级的库与配置文件,你conda环境中安装的pyodbc关联的是conda自带的unixODBC组件,不会读取系统路径下的ODBC驱动配置,因此出现识别不到驱动的问题。
快速验证方案
你可以直接在连接代码中指定驱动的绝对路径,无需依赖pyodbc的驱动名称识别:
- 先在系统终端执行命令获取驱动实际路径:
odbcinst -j
在输出中找到DRIVERS对应的配置文件路径,打开该路径下的odbcinst.ini文件,找到[ODBC Driver 17 for SQL Server]段落,复制Driver字段对应的文件路径,通常为/usr/local/lib/libmsodbcsql.17.dylib(Intel芯片Mac)或/opt/homebrew/lib/libmsodbcsql.17.dylib(M系列芯片Mac)。
2. 修改你的数据库连接代码:
将原来连接字符串中的DRIVER={ODBC Driver 17 for SQL Server}替换为DRIVER=你刚才复制的驱动绝对路径即可正常连接。
永久修复方案(让Anaconda环境正常识别驱动名称)
方法1:使用系统pip重装pyodbc
激活你要使用的Anaconda虚拟环境后,执行以下命令:
pip uninstall pyodbc -y pip install pyodbc
不要使用conda install pyodbc安装,conda源的pyodbc默认会绑定conda自带的unixODBC组件,不会读取系统配置。
方法2:配置Anaconda环境变量
- 执行
conda env list找到你目标虚拟环境的实际存储路径,假设为/Users/xxx/opt/anaconda3/envs/myenv - 在该路径下新建
etc/conda/activate.d/odbc_config.sh文件,写入以下内容:
export ODBCSYSINI=/usr/local/etc export DYLD_LIBRARY_PATH=/usr/local/lib:$DYLD_LIBRARY_PATH
注意将上述路径替换为你之前执行odbcinst -j输出的对应系统路径。
3. 重新激活虚拟环境后启动Jupyter Notebook,此时执行pyodbc.drivers()即可正常识别到ODBC驱动。
内容的提问来源于stack exchange,提问作者Maiia Sleptcova
相关产品推荐
相关产品推荐

