如何在MacOS Sierra上安装pymssql

17
Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/private/tmp/pip-build-J1I0ox/pymssql/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-qmtdBW-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/tmp/pip-build-J1I0ox/pymssql/

我遇到了与这里显示的相同错误。我按照该页面上的说明尝试了brew install freetds,然后是sudo -H pip install pymssql
这将生成以下错误代码:
    _mssql.c:18814:15: error: use of undeclared identifier 'DBVERSION_80'
    __pyx_r = DBVERSION_80;
              ^
4 warnings and 1 error generated.
error: command 'cc' failed with exit status 1

----------------------------------------
Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/private/tmp/pip-build-J1I0ox/pymssql/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-qmtdBW-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/tmp/pip-build-J1I0ox/pymssql/

搜索这个错误,我找到了这个页面。我尝试了那里发布的解决方案,包括尝试brew unlink freetds; brew install homebrew/versions/freetds091brew uninstall freetds; brew install homebrew/versions/freetds091,但在尝试sudo -H pip install pymssql时出现了不同的错误:

_mssql.c:266:10: fatal error: 'sqlfront.h' file not found
#include "sqlfront.h"
         ^
1 error generated.
error: command 'cc' failed with exit status 1

----------------------------------------
Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/private/var/folders/_s/27xppw4j3yl78c9l4v1w3n9m0000gn/T/pip-build-97A9sQ/pymssql/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /var/folders/_s/27xppw4j3yl78c9l4v1w3n9m0000gn/T/pip-0nUZo4-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/_s/27xppw4j3yl78c9l4v1w3n9m0000gn/T/pip-build-97A9sQ/pymssql/

于是我放弃了,尝试安装pyodbc,但仍然遇到类似的错误:src/pyodbc.h:56:10: 致命错误:找不到'sql.h'文件 #include sql.h

如果有任何帮助,将不胜感激。


你尝试通过brew(brew install unixodbc)安装unixodbc了吗?它包含了你缺失的sql.h - zaphodef
2个回答

36

这个链接最终解决了我的问题。对于其他遇到同样问题的人,以下命令序列对我有用。

brew uninstall --force freetds
brew install freetds@0.91
brew link --force freetds@0.91
pip install pymssql

以上问题在2018.03仍然存在。上述步骤非常有效!谢谢! - Joe J
我不得不在MacOS 10.12.6上执行brew link --overwrite freetds@0.91 --force才能使链接工作。 - Gary Rogers

12

截至2021年2月,我不能再安装freetds@0.91,因为Homebrew没有提供它。当前版本的freetds是1.2.18,brew link --force freetds似乎没有任何改变。

'sqlfront.h'文件未找到的根本问题是在安装期间freetds文件未能正确链接。我们可以通过执行以下操作来解决这个问题:

export LDFLAGS="-L/opt/homebrew/opt/freetds/lib"
export CPPFLAGS="-I/opt/homebrew/opt/freetds/include"
pip install pymssql

如果您使用的是 Apple Silicon 处理器,Homebrew 安装 freetds 的位置可能是 /opt/homebrew/opt/freetds,但您的情况可能不同。如果您使用的是 Intel 处理器,则路径可能是 /usr/local/opt/freetds

要查找 Homebrew(或任何程序)在系统中的确切安装位置,您可以执行以下操作:

brew --prefix freetds

这应该返回类似于/opt/homebrew/opt/freetds/opt/homebrew/opt/freetds@1.2.18的结果。 您可以忽略任何版本号,并附加/lib/include以获取所需的路径。

这是一个很方便的技巧,需要记住,因为它适用于通过homebrew安装的许多其他依赖项的安装问题。


这解决了我遇到的问题,macOS 12.3 在 Apple M1 芯片上,Python 3.9.10。我已经使用brew安装了FreeTDS,但仍然存在问题,在该终端中引入环境变量后,我能够pip安装pymssql。谢谢! - Douglas Plumley
这在我的Mac M1上有效。 - moo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接