Подтвердить что ты не робот

Установка 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? Известно ли обходное решение?

4b9b3361

Ответ 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 .