在 OSX 12.2 (蒙特雷) 上安装 pyodbc 失败

Jar*_*kia 5 python macos pip pyodbc

在 macOS 12 上pip install pyodbc会出现错误:

src/pyodbc.h:56:10: fatal error: 'sql.h' file not found
Run Code Online (Sandbox Code Playgroud)

对于旧版本的 macOS 和 Pip,此主题已在 OSX 10.9 (Mavericks) 上安装 pyodbc 失败中解决。所提供的答案均不适用于当前版本。

Jar*_*kia 6

注意:由于 macOS、Pip、Homebrew 和 unixODBC 的版本不同,失败的原因似乎随时间变化很大。

在 pyodbc 4.0.32 中运行pip install pyodbc时指定 unixODBC 库的位置:

CPPFLAGS='-I/opt/homebrew/Cellar/unixodbc/2.3.9_1/include' \
  LDFLAGS='-L/opt/homebrew/Cellar/unixodbc/2.3.9_1/lib' \
  pip install pyodbc
Run Code Online (Sandbox Code Playgroud)

似乎不需要安装 iODBC,因为 unixODBC 可以工作。

此外,获取 SQL Server 的 ODBC 驱动程序也很麻烦。https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/install-microsoft-odbc-driver-sql-server-macos上的文档不准确,因为 OpenSSL 版本 3 和 1 失败在安装时正确检测。

由于 OpenSSL 版本冲突,尝试连接 SQL Server 将导致如下错误:

  • SSL 提供程序:[无法加载 OpenSSL 库,请确保安装了 OpenSSL 1.0 或 1.1]。
  • 客户端无法建立连接。
  • 警告:<command/library here> 正在以不安全的方式加载 libcrypto(随后会导致进程崩溃)

https://github.com/microsoft/homebrew-mssql-release/issues/59中描述了修复驱动程序加载的各种尝试。

手动符号链接 OpenSSL 1.1 修复了撰写本文时的问题:

ln -s /opt/homebrew/opt/openssl@1.1/lib/libssl.dylib /usr/local/lib/
ln -s /opt/homebrew/opt/openssl@1.1/lib/libcrypto.dylib /usr/local/lib/
Run Code Online (Sandbox Code Playgroud)

请理解,这可能会发生变化。