无法在 Apple Silicon 上导入 pyodbc - 未找到符号:_SQLAllocHandle

eck*_*kha 18 python pyodbc apple-silicon apple-m1

我目前正在使用 Apple Silicon 的 2021 款 MacBook Pro 上开发 Python (3.8) 项目。最终,目标是使用 Apple 的 Tensorflow fork 从 Azure SQL DB 读取的数据构建 ML 模型。因此,我正在本地 Apple Silicon 包上开发该项目 - 不使用 Rosetta。

当我尝试导入 pyodbc 包(4.0.30)以连接到我的数据库时,出现了问题。我不断收到以下错误

  File "<stdin>", line 1, in <module>
ImportError: dlopen({myvenv}/lib/python3.8/site-packages/pyodbc.cpython-38-darwin.so, 2):
Symbol not found: _SQLAllocHandle
  Referenced from: {myvenv}/lib/python3.8/site-packages/pyodbc.cpython-38-darwin.so
  Expected in: flat namespace
 in {myvenv}/lib/python3.8/site-packages/pyodbc.cpython-38-darwin.so
Run Code Online (Sandbox Code Playgroud)

然而,如果我使用 Rosetta 做同样的事情,一切都会正常。我找不到任何其他线程描述类似的行为。

有谁知道如何解决这个问题?

zhr*_*ist 44

我的感觉是该包没有针对 ARM 架构正确编译。

您可以卸载pyodbc并重新安装。如果使用 pip,它会是这样的:

pip uninstall pyodbc
Run Code Online (Sandbox Code Playgroud)

并在本地编译安装:

pip install --no-binary :all: pyodbc
Run Code Online (Sandbox Code Playgroud)

不要忘记在类似 Unix/Linux 的平台上,您需要下载 unixodbc 源代码发行版,因为 pyodbc 是针对 ODBC 驱动程序管理器构建的,即 unixodbc 是先决条件。使用brew包管理器安装示例:

brew install unixodbc
Run Code Online (Sandbox Code Playgroud)