Установка pyodbc завершается с ошибкой на OSX 10.9 (Mavericks)
При запуске pip install pyodbc
я получаю
In file included from .../build/pyodbc/src/buffer.cpp:12:
.../build/pyodbc/src/pyodbc.h:52:10: fatal error: 'sql.h' file not found
#include <sql.h>
^
1 error generated.
error: command 'cc' failed with exit status 1
Кажется, что Mavericks не имеет sql.h в каталоге /usr/include
Кто-нибудь мог установить pyodbc? Известно ли обходное решение?
Ответы
Ответ 1
Как вы заметили, OSX Mavericks выпустила заголовки sql, необходимые для компиляции PyODBC.
После этих шагов мне удалось установить PyODBC:
- Убедитесь, что у вас установлена библиотека iODBC (http://www.iodbc.org/)
- Загрузка и извлечение источников iODBC
- Выполнить
pip install --no-install pyodbc
-
cd [VIRTUAL_ENV]/build/pyodbc
- Запустить
python setup.py build_ext --include-dirs=[LIBIODBC_SOURCES]/include/
-
Запустите pip install --no-download pyodbc
:
Installing collected packages: pyodbc
Running setup.py install for pyodbc
warning: no files found matching 'tests/*'
Successfully installed pyodbc
Cleaning up...
Я мог бы также скопировать файлы под [libiodbc_sources]/include/
в my /usr/include
и просто запустить pip install pyodbc
, но я не хотел добавлять файлы вручную в системные папки.
Ответ 2
Вы можете использовать Homebrew для установки unixodbc, а затем pyodbc через pip обычным способом.
brew install unixodbc && pip install pyodbc
Это работает для меня на Маверикс.
Ответ 3
После многих тупиков это сработало для меня:
$ brew unlink unixodbc
$ brew install unixodbc --universal
$ sudo pip install --upgrade --global-option=build_ext --global-option="-I/usr/local/include" --global-option="-L/usr/local/lib" --allow-external pyodbc --allow-unverified pyodbc pyodbc
Ответ 4
Смотрите мои инструкции , которые я написал после некоторых тщетных попыток других ответов:
Сначала установите следующие библиотеки:
$ brew install unixodbc
$ brew install freetds --with-unixodbc
FreeTDS должен работать уже без конфигурации:
$ tsql -S [IP or hostname] -U [username] -P [password]
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> ^D
На unixODBC нам нужно установить ссылку на драйвер, отредактировать /usr/local/etc/odbcinst.ini
:
[FreeTDS]
Description = TD Driver (MSSQL)
Driver = /usr/local/lib/libtdsodbc.so
Setup = /usr/local/lib/libtdsodbc.so
FileUsage = 1
Используемая команда тестирования требует настройки DSN, поэтому отредактируйте /usr/local/etc/odbc.ini
:
[MYDSN]
Driver = FreeTDS
Server = [IP address]
Port = 1433
Конфигурация для вашего DNS может отличаться, вам могут понадобиться директивы TDS_Version
или Servername
. Выше работала для меня для SQL Server 2008 R2. Теперь запустите команду test:
$ isql MYDSN [username] [password] -v
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> ^D
Если тест прошел успешно, вы можете продолжить установку библиотеки Python pyodbc
. Текущая версия записи (3.0.7) не связывается с unixODBC в OS X, поэтому необходимо внести изменения в setup.py
. Загрузите исходный пакет и извлеките его где-нибудь. Найдите следующие строки (146-147):
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
И измените эту строку:
settings['libraries'].append('iodbc')
в
settings['libraries'].append('odbc')
Затем запустите следующую команду:
> python install .
Теперь pyodbc должен работать:
import pyodbc
pyodbc.connect('DSN=MYDSN;UID=[username];PWD=[password]')
Вам не нужно настраивать свой DSN в odbc.ini
, поэтому очистите этот файл. Вероятно, вы захотите выбрать базу данных для подключения, поэтому измените строку подключения следующим образом:
pyodbc.connect('DRIVER=FreeTDS;SERVER=[IP address];PORT=1433;DATABASE=[database];UID=[username];PWD=[password]')
Обратите внимание, что вы также можете ссылаться на файл библиотеки FreeTDS вместо odbcinst.ini
, например:
pyodbc.connect('DRIVER=/usr/local/lib/libtdsodbc.so;SERVER=[IP address];PORT=1433;DATABASE=[database];UID=[username];PWD=[password]')
Ответ 5
У меня не было радости от ответа @Vitaly, потому что, по-видимому, для Mavericks существует проблема создания пакетов, связанных с отсутствием поддержки жесткой привязки. Я не мог получить пакет для сборки.
Итак, я выбрал второе предложение @Vitaly, которое должно было скопировать необходимые файлы из каталога [libiodbc_sources]/include/
в /usr/include
и найти найденную установку. Вот список файлов, которые вам нужно скопировать:
- sql.h
- sqltypes.h
- iodbcunix.h
- sqlext.h
- sqlucode.h
Ответ 6
Это сработало для меня, когда я попробовал все, что было предложено.
brew install unixodbc
sudo pip install --upgrade --global-option=build_ext --global-option="-I/usr/local/include" --global-option="-L/usr/local/lib" --allow-external pyodbc --allow-unverified pyodbc pyodbc
Запуск Mac OS 10.11.1, Homebrew 0.9.5 и pip 7.1.2
Ответ 7
Если вы видите ошибки типа
clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]
Проблема заключается в том, что с помощью Mavericks Apple удалил gcc из инструментов разработки командной строки; теперь clang просто привязан к gcc. Флаг --mno-fused-madd
не поддерживается clang (то же самое относится к множеству других флагов).
Одним из решений может быть установка gcc с использованием homebrew или другого метода и symlink/usr/bin/gcc для надлежащего gcc.
Простейшее обходное решение, которое сработало для меня, подавляет эту ошибку, превращая ее в предупреждения:
export CFLAGS=-Qunused-arguments
После настроек, которые я смог pip install pyodbc
без ошибок.
PS! В будущих версиях clang это может быть невозможно. По крайней мере, он работает на:
$> gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix
Refs:
https://bitbucket.org/cffi/cffi/issue/46/unused-mno-fused-madd-clang-warnings-on-os
https://coderwall.com/p/lqpp8w
clang: error: неподдерживаемая опция '-static-libgcc' на Mac OSX Mavericks
Ответ 8
Я просто прошел весь процесс в Mac OS X; подключение к pyobbc к MS SQL Server 2014. Весь процесс выглядит следующим образом:
Соединение:
pyodbc ----> iodbc ----> freetds ----> MS SQL Server 2014
-
Создайте freetds (драйвер/соединитель SQL Server):
./configure --prefix=/usr/local --with-tdsver=8.0
make
sudo make install
// you should see /usr/local/lib/libtdsodbc.so was generated
//test method 1:
TDSVER=8.0 tsql -H hostname -p 1433 -U username -P XXX -D databasename
//test method 2:
//config /usr/local/etc/freetds.conf
[mssqlserver]
host = XXX
port = 1433
tds version = 8.0
//run
tsql -S mssqlserver -U username -P XXX -D databasename
//if you can run sql, good to go!
-
Создайте iodbc (менеджер ODBC):
//download from github, go to the folder
cd mac
./configure
./make
sudo ./make install
//config /usr/local/etc/odbc.ini
[mssqlserver]
Driver=/usr/local/lib/libtdsodbc.so
TDS_Version=8.0
Server=xxxx
Port = 1433
Trace = Yes
Description=XXX
//test
which iodbctest
iodbctest
DSN=masqlserver;UID=xxx;PWD=xxx
//if you can run sql, good to go!
-
Подключите pyodbc (обертка ODBC Python) к iodbc:
pip install pyodbc
//in python,
conn = pyodbc.connect("DSN=mssqlserver;UID=xxx;PWD=xxxx")
Ответ 9
Мне удавалось
sudo port install py-pyodbc
Ответ 10
Я добавлю $0,02 к этому. Ответ Виталия был главным источником вдохновения.
OSX 10.9.5, MacPorts 2.3.4, пункт 8.1.2 (который не имеет опции -no-install), virtualenv 14.0.6
Также помогло: fooobar.com/questions/127689/...
В любом случае, установите iODBC через MacPorts
sudo port install libiodbc
Отсутствующий sql.h депонируется MacPorts @ /opt/local/include
Теперь сообщите pip, где он может найти входящие (что, когда связанный ответ пригодился):
pip install pyodbc --global-option=build_ext --global-option="-I/opt/local/include/"
Ответ 11
Поскольку pip
больше не поддерживает параметр --no-install
, а параметр --download
устарел. Я должен был выполнить следующие шаги.
pip download pyodbc
tar -zxvf pyodbc-4.0.17.tar.gz
python setup.py build_ext --include-dirs=[DIRECTORY CONTAINING THE HEADERS]
pip install pyodbc
Ответ 12
Сегодня я встретил ту же проблему на ubuntu 14.04. Я обнаружил, что какой-то парень в ссылке ниже должен установить unixodbc-dev.
https://code.google.com/p/pyodbc/issues/detail?id=55
Я сделал это, а затем успех установки pip.
Надеюсь, что это поможет.
Ответ 13
Версия ОС: El Capitan 10.11.6
Python Версия: 2.7.11
Версия протокола: pip 9.0.1
1. Install iodbc for Mac (my installation is in [iODB_loc]=/usr/local/iODBC)
2. pip install --download [download_location] pyodbc==3.0.10
3. cd [download_location]
4. tar -xvzf pyodbc-3.0.10.tar.gz
5. cd pyodbc-3.0.10
6. vim setup.py:
settings['libraries'].append('odbc')
->
settings['libraries'].append('iodbc')
7. python setup.py build_ext --include-dirs=[iODB_loc]/include/
8. pip install --upgrade .