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)