如何在M1 mac上正确安装pyodbc和驱动程序

问题描述 投票:0回答:7

我有一台新的 M1 pro macbook,我正在尝试在我的机器上安装 pyodbc 和相关驱动程序。

到目前为止,我已经根据此处的说明通过自制程序和 ODBC 驱动程序安装了 unixodbc:https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/install-microsoft-odbc- driver-sql-server-macos?view=sql-server-ver15https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/install-microsoft-odbc-driver-sql-server- macos?view=sql-server-ver15

然后我 pip 安装了 pyodbc,但是当我尝试在测试脚本中运行

pyodbc.connect()
时,python 只是中止并显示以下消息,无论我使用哪个连接字符串:

[1]    2086 abort      python test.py

经过更多调查后,我发现 pyodbc 没有任何驱动程序。当我运行

pyodbc.drivers()
时,我得到一个空列表。所以看来 pyodbc 找不到我之前安装的驱动程序。

这是我运行时的输出

odbcinst -j

unixODBC 2.3.9
DRIVERS............: /opt/homebrew/etc/odbcinst.ini
SYSTEM DATA SOURCES: /opt/homebrew/etc/odbc.ini
FILE DATA SOURCES..: /opt/homebrew/etc/ODBCDataSources
USER DATA SOURCES..: /Users/kdot/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

并且

odbcinst.ini
文件包含:

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/homebrew/lib/libmsodbcsql.17.dylib
UsageCount=3

我还尝试在连接字符串中明确给出 pyodbc 的驱动程序文件路径,但随后

pyodbc.connect()
只是挂起而不是立即中止。

我在具有以下版本的虚拟环境中运行所有这些:

python: 3.8.10
pyodbc: 4.0.32

有谁知道如何让pyodbc看到并使用相关驱动程序?

sql-server macos odbc pyodbc
7个回答
12
投票

首先,按照 Microsoft here 的指示安装 ODBC 驱动程序。

此外,Microsoft 建议按如下方式创建符号链接:

sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini

但是,这些文件在 M1 Mac 上的位置可能会有所不同,具体取决于默认的自制程序目录。就我而言,以下路径有效:

sudo ln -s /opt/homebrew/etc/odbcinst.ini /etc/odbcinst.ini
sudo ln -s /opt/homebrew/etc/odbc.ini /etc/odbc.ini

5
投票

适用于MAC M1芯片

pip install --no-binary :all: pyodbc

参考:https://github.com/mkleehammer/pyodbc/issues/1124


3
投票

这就是我在 m2 macbook 上的工作(来自官方 ms 文档)。
确保您已安装自制程序。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
HOMEBREW_ACCEPT_EULA=Y brew install msodbcsql17 mssql-tools

sudo ln -s /opt/homebrew/etc/odbcinst.ini /etc/odbcinst.ini
sudo ln -s /opt/homebrew/etc/odbc.ini /etc/odbc.ini

2
投票

发现以下链接有助于在 MacBook M1 芯片上安装 pyodbc。

我们碰巧遇到 sql.h 文件丢失错误,如果我们尝试直接从站点安装轮子,则会抛出平台不支持错误。

按照以下文档操作,然后将导出命令添加到您的 zrc 或 bash 文件中,您就可以开始了。

https://whodeenie.medium.com/installing-pyodbc-and-unixodbc-for-apple-silicon-8e238ed7f216

需要更多地了解该错误以及人们如何尝试学习它。

https://github.com/mkleehammer/pyodbc/issues/846


1
投票

这里的问题是“像

nvm
brew
这样的几个关键CLI工具没有为新的M1架构构建的本机版本。” 来源.

幸运的是,Apple Silicon 附带了一个名为 Rosetta 2 的翻译层,它基本上是一个 CLI 界面,您必须通过它安装

brew
等工具才能正确安装。

this Medium post 中,您可以阅读如何使用 Rosetta 2。我们通过安装 Python 3.9、pip、wheel、openssl、unixodbc、freetds、正确的驱动程序以及最后的 pyodbc(按此顺序)使 pyodbc 正常工作,所有这些都与 Rosetta 2 一起安装.


0
投票

我在使用 2022 款 MacBook Pro 的 macOS Ventura 上默认安装 Homebrew 和 ODBC 时仍然遇到此问题。

唯一有效的方法是完全卸载 Homebrew 和 ODBC 驱动程序,然后使用前缀

arch -x86_64
重新安装。

$ arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

$ arch -x86_64 brew install msodbcsql18 mssql-tools18


0
投票

我尝试在 Mac 中安装 ODBC 驱动程序时遇到问题。它似乎没有找到驱动程序,当运行 odbcinst -j 时,我得到以下信息:

unixODBC 2.3.11 驱动程序............: /etc//etc/odbcinst.ini 系统数据源:/etc/odbc.ini 文件数据源..:/etc/ODBCDataSources 用户数据源..:/etc/odbc.ini SQLULEN 大小......: 8 SQLLEN 大小........: 8 SQLSETPOSIROW 大小:8

到目前为止,我已尝试根据 Microsoft 指南卸载/重新安装各种 odbcinst.ini 位置,但我无法删除驱动程序的 /etc//etc/odbcinst.ini 条目....
有人知道去哪里看吗?

© www.soinside.com 2019 - 2024. All rights reserved.