我目前正在使用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做同样的事情,一切都很好。我找不到任何其他线程描述类似的行为。
有人知道如何解决这个问题吗?
2条答案
按热度按时间2j4z5cfb1#
我的感觉是,该软件包没有正确编译为ARM架构。
您可以卸载pyodbc并重新安装它。如果使用pip,它会像这样:
并在本地编译安装:
不要忘记在Unix/Linux之类的平台上,你需要下载unixodbc源代码发行版,因为pyodbc是针对ODBC驱动程序管理器构建的,也就是说unixodbc是先决条件。使用brew包管理器的安装示例:
qacovj5a2#
未编译的安装应该可以工作:
这在本地编译,因此是兼容的,并克服了这个问题。