如何在MacOS Sierra上安装pymssql

问题描述 投票:0回答:3
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/

我遇到了与here显示的相同错误。我按照该页面上的说明尝试了

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/freetds091
 brew 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: fatal error: 'sql.h' file not found
    #include sql.h 

对此的任何帮助都会很棒。

python sql sql-server macos pymssql
3个回答
39
投票

此链接最终解决了我的问题。对于遇到这些问题的其他人来说,这一系列命令对我有用。

brew uninstall --force freetds
brew install [email protected]
brew link --force [email protected]
pip install pymssql

15
投票

截至 2021 年 2 月

我无法再安装[电子邮件受保护],因为自制软件没有可用的功能。 freetds 的当前版本是 1.2.18,

brew link --force freetds
似乎没有任何改变。

根本问题

'sqlfront.h' file not found
是由于安装过程中 freetds 文件未正确链接所致。我们可以通过这样做来解决这个问题

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

其中

/opt/homebrew/opt/freetds
是 homebrew 在您的系统上安装 freetds 的位置(我在 Apple Silicon 上),对您来说可能有所不同。如果您使用英特尔,您的可能看起来像
/usr/local/opt/freetds

要准确找到 homebrew 在您的系统上安装 freetds(或任何与此相关的程序)的位置,您可以这样做

brew --prefix freetds

这应该返回类似

/opt/homebrew/opt/freetds
/opt/homebrew/opt/[email protected]
的内容。您可以忽略任何版本号并附加
/lib
/include
来获取您需要的路径。

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


0
投票

我花了一整天的时间来浏览我认为是关于关键字

pip install pymssql stdio.h file not found clang failed with exit code
couldn't resolve module/action 'community.general.mssql_script'
的所有SO和其他信息丰富的帖子,并且必须提及
ERROR: Could not build wheels for pymssql

更多关于我的情况:

  • MacOS 索诺玛 14.7
  • 苹果M2 Pro
  • 尝试过系统Python(3.9)
  • 尝试过 Brew Python (3.12)
  • 尝试过 pyenv
  • 尝试过pipx

最后,以下序列包括 @mcfizz 修复 freetds 文件在安装过程中无法正确链接的问题:

brew install [email protected]
pip3.10 install ansible
pip3.10 install -r ~/.ansible/collections/ansible_collections/azure/azcollection/requirements.txt
myfreetds=$(brew --prefix freetds)
export LDFLAGS="-L$myfreetds/lib"
export CPPFLAGS="-I$myfreetds/include"
pip3.10 install pymssql

它的作用是

  1. 使用 python 版本 3.10(一位导师让我知道在撰写本文时 3.12 破坏了很多东西)
  2. 使用 3.10 pip 确保不同 python 解释器的某些 pip 不会将包放在意外的位置
  3. 重新安装 ansible azure 和 azure 集合依赖项
  4. 正确链接 freetds 库并包含
  5. 安装 pymssql(如果您希望使用 ansible fqcn Community.general.mssql_script,这是必需的)

如果您在发帖后阅读今年的内容,我可以建议您使用上述脚本尝试各种 python 版本。保持积极、坚持、科学的态度。愿你战胜“youshallnotpass”的蟒蛇轮。

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