我有一个新的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-服务器版本15https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/install-microsoft-odbc-driver-sql-server-macos?view=sql-服务器-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看到并使用相关的驱动程序吗?
首先,按照Microsoft的指示在此处安装ODBC驱动程序。
此外,微软建议创建如下符号链接:
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
这就是我在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
发现以下链接有助于在MacBook M1芯片上安装pyodbc。
我们碰巧得到sql.h文件丢失错误,如果我们尝试直接从站点安装轮子,它会抛出平台不支持的错误。
按照下面的文档,然后将导出命令添加到zrc或bash文件中,就可以开始了。
https://whodeenie.medium.com/installing-pyodbc-and-unixodbc-for-apple-silicon-8e238ed7f216
需要更多关于这个bug的阅读,以及人们如何尝试学习它。
https://github.com/mkleehammer/pyodbc/issues/846
这里的问题是"CCD_ 7和CCD_"来源
幸运的是,Apple Silicon提供了一个名为Rosetta 2的翻译层,它基本上是一个CLI界面,您必须通过它安装brew
等工具才能正确安装。
在这篇Medium文章中,你可以阅读如何使用罗塞塔2。我们通过安装Python3.9、pip、wheel、openssl、unixodbc、freetds、正确的驱动程序,最后用Rosetta 2安装pyodbc(按顺序(,使pyodbc正常工作。
默认的Homebrew&使用2022款MacBook Pro在macOS Ventura上安装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
对于MAC M1芯片
pip install --no-binary :all: pyodbc
参考:https://github.com/mkleehammer/pyodbc/issues/1124