Как установить pymssql на MacOS Sierra

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/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

Любая помощь с этим будет здорово.


person binzabinza    schedule 06.07.2017    source источник
comment
Вы пытались установить unixodbc через brew (brew install unixodbc)? Он содержит sql.h, которого вам не хватает.   -  person zaphodef    schedule 07.07.2017


Ответы (2)


Эта ссылка решила мою проблему. Для всех, у кого есть эти проблемы, эта последовательность команд сработала для меня.

brew uninstall --force freetds
brew install [email protected]
brew link --force [email protected]
pip install pymssql
person binzabinza    schedule 07.07.2017
comment
Вышеупомянутая проблема все еще остается проблемой по состоянию на 2018.03. Описанные выше шаги сработали отлично! Благодарю вас! - person Joe J; 18.03.2018
comment
Мне пришлось brew link --overwrite [email protected] --force заставить ссылку работать на MacOS 10.12.6. - person Gary Rogers; 23.03.2019

По состоянию на февраль 2021 г.

Я больше не могу установить [email protected], так как в доморощенном его нет. Текущая версия 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), и может быть другим для вас. Если вы используете Intel, ваш код может выглядеть примерно так: /usr/local/opt/freetds.

Чтобы точно узнать, где доморощенный установил freetds (или любую программу в этом отношении) в вашей системе, вы можете сделать

brew --prefix freetds

Это должно вернуть что-то вроде /opt/homebrew/opt/freetds или /opt/homebrew/opt/[email protected]. Вы можете игнорировать любые номера версий и добавлять /lib и /include, чтобы получить нужные вам пути.

Это удобный трюк, о котором следует помнить, поскольку он применим ко многим другим проблемам установки с зависимостями, установленными через homebrew.

person McFizz    schedule 12.02.2021