python 无法导入Apple Silicon上的pyodbc-找不到符号:_SQLAllocHandle

bvuwiixz  于 2023-03-28  发布在  Python
关注(0)|答案(2)|浏览(311)

我目前正在使用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

然而,如果我使用Rosetta做同样的事情,一切都很好。我找不到任何其他线程描述类似的行为。
有人知道如何解决这个问题吗?

2j4z5cfb

2j4z5cfb1#

我的感觉是,该软件包没有正确编译为ARM架构。
您可以卸载pyodbc并重新安装它。如果使用pip,它会像这样:

pip uninstall pyodbc

并在本地编译安装:

pip install --no-binary :all: pyodbc

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

brew install unixodbc
qacovj5a

qacovj5a2#

未编译的安装应该可以工作:

pip install --pre --no-binary :all: pyodbc

这在本地编译,因此是兼容的,并克服了这个问题。

相关问题