L'installation de pyodbc échoue sur OSX 10.9 (Mavericks)

quand on exécute pip install pyodbc , je reçois

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

il semble que Mavericks n'ait pas de sql.h sous / usr / include

est-ce que quelqu'un a pu installer pyodbc? Est-il une solution connue?

35
demandé sur Moshe 2013-11-19 18:48:45

13 réponses

As you noted OSX Mavericks droped sql headers that are required for PyODBC compilation. En suivant ces étapes, J'ai pu installer PyODBC:

  1. assurez-vous que la bibliothèque iODBC soit installée ( http://www.iodbc.org / )
  2. télécharger et extraire des sources iODBC
  3. Exécuter pip install --no-install pyodbc
  4. cd [VIRTUAL_ENV]/build/pyodbc
  5. Exécuter python setup.py build_ext --include-dirs=[LIBIODBC_SOURCES]/include/
  6. Exécuter 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...
    

je pouvais aussi bien copier les fichiers sous [libiodbc_sources]/include/ dans mon /usr/include et juste exécuter pip install pyodbc , mais je ne voulais pas ajouter des fichiers manuellement dans les dossiers système.

32
répondu m_vitaly 2013-11-19 14:51:59

vous pouvez utiliser Homebrew pour installer unixodbc, puis pyodbc via pip de la manière habituelle.

brew install unixodbc && pip install pyodbc

ça marche pour moi sur Mavericks.

53
répondu Ryan Balfanz 2014-02-24 23:36:36

Après de nombreuses impasses, cela a fonctionné pour moi:

$ 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
29
répondu dennisobrien 2015-04-28 02:52:48

Voir mon instructions d'installation que j'ai écrite après quelques vaines tentatives des autres réponses:

d'abord, installez les bibliothèques suivantes:

$ brew install unixodbc
$ brew install freetds --with-unixodbc

FreeTDS devrait déjà fonctionner maintenant, sans configuration:

$ 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

sur unixODBC, nous avons besoin de lien vers le pilote, éditer /usr/local/etc/odbcinst.ini :

[FreeTDS]
Description = TD Driver (MSSQL)
Driver = /usr/local/lib/libtdsodbc.so
Setup = /usr/local/lib/libtdsodbc.so
FileUsage = 1

la commande test nous utilisons nécessite la configuration d'un DSN, alors éditez /usr/local/etc/odbc.ini :

[MYDSN]
Driver = FreeTDS
Server = [IP address]
Port = 1433

la configuration de votre DNS peut varier, Vous pouvez avoir besoin des directives TDS_Version ou Servername . Ce qui précède a fonctionné pour moi pour SQL Server 2008 R2. Maintenant, lancez la commande test:

$ isql MYDSN [username] [password] -v
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> ^D

si le test a réussi, vous pouvez continuer à installer la bibliothèque Python pyodbc . La version actuelle de writing (3.0.7) ne fait pas de lien avec unixODBC sur OS X, donc un changement doit être fait à setup.py . Téléchargez le paquet source et extrayez-le quelque part. Trouvez les lignes suivantes (146-147):

    elif sys.platform == 'darwin':
        # OS/X now ships with iODBC.

et changer cette ligne:

        settings['libraries'].append('iodbc')

dans:

        settings['libraries'].append('odbc')

ensuite exécuter la commande suivante pour installer:

> python install .

maintenant pyodbc devrait fonctionner:

import pyodbc
pyodbc.connect('DSN=MYDSN;UID=[username];PWD=[password]')

vous n'avez pas besoin de configurer votre DSN dans odbc.ini , si clair ce dossier. Vous voulez probablement sélectionner une base de données sur connect, alors changez votre ligne connect pour lire:

pyodbc.connect('DRIVER=FreeTDS;SERVER=[IP address];PORT=1433;DATABASE=[database];UID=[username];PWD=[password]')

notez que vous pouvez également créer un lien vers le fichier de la bibliothèque de FreeTDS au lieu d'utiliser odbcinst.ini , comme ceci:

pyodbc.connect('DRIVER=/usr/local/lib/libtdsodbc.so;SERVER=[IP address];PORT=1433;DATABASE=[database];UID=[username];PWD=[password]')
13
répondu bouke 2014-07-22 04:41:18

je n'ai pas eu de joie avec la réponse de @Vitaly parce qu'il semble y avoir un problème de construction de paquets sur Mavericks en rapport avec le manque de soutien pour le hard-linking. Je n'ai pas pu obtenir le paquet à construire.

J'ai donc opté pour la seconde suggestion de @Vitaly qui était de copier les fichiers nécessaires du répertoire [libiodbc_sources]/include/ vers /usr/include et l'installation a fonctionné find. Voici une liste des fichiers que vous devrez copier-coller:

  • sql.h
  • sqltypes.h
  • iodbcunix.h
  • sqlext.h
  • sqlucode.h
10
répondu MFB 2014-01-10 05:09:36

cela a fonctionné pour moi après avoir essayé à peu près tout le reste suggéré.

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

Running Mac OS 10.11.1, Homebrew 0.9.5, and pip 7.1.2

8
répondu Lothilius 2015-11-13 14:29:59

si vous voyez des erreurs comme

clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]

le problème est qu'avec Mavericks Apple a supprimé gcc des outils de développement en ligne de commande; il est maintenant clang juste symlinked à gcc . Le drapeau --mno-fused-madd n'est pas supporté par clang (il en va de même pour beaucoup d'autres drapeaux).

une solution pourrait être d'installer gcc en utilisant homebrew ou un autre méthode et lien symbolique / usr/bin / gcc vers un gcc approprié.

une solution plus simple qui a fonctionné pour moi est de supprimer ces erreurs en les transformant en Avertissements:

export CFLAGS=-Qunused-arguments

après réglages que j'ai pu pip install pyodbc sans erreurs.

PS! Dans les versions futures de clang cela pourrait ne pas être possible. Au moins ça marche sur:

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

Réfs:

https://bitbucket.org/cffi/cffi/issue/46/unused-mno-fused-madd-clang-warnings-on-os https://coderwall.com/p/lqpp8w clang: error: unsupported option '- static-libgcc' on Mac OSX Mavericks

2
répondu asbjornenge 2017-05-23 12:02:11

je viens de passer par tout le processus sur Mac OS X; connexion à pyodbc à MS SQL Server 2014. L'ensemble du processus est le suivant:

pipeline de connexion:

pyodbc ----> iodbc ----> freetds ----> MS SQL Server 2014
  1. Construire freetds (le pilote SQL Server/connecteur):

    ./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!
    
  2. Build iodbc (ODBC manager):

    //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!
    
  3. Connect pyodbc (Python ODBC wrapper) pour iodbc:

    pip install pyodbc 
    
    //in python,
    
    conn = pyodbc.connect("DSN=mssqlserver;UID=xxx;PWD=xxxx") 
    
1
répondu Hongli Deng 2015-05-15 20:05:55

j'ai réussi avec sudo port install py-pyodbc

0
répondu Brian 2015-10-12 18:19:00

j'ajoute mes 0,02 $à ça. La réponse de Vitaly a été la principale source d'inspiration.

OSX 10.9.5, MacPorts 2.3.4, pip 8.1.2( qui n'avait pas d'option --no-install), virtualenv 14.0.6

également aidé: https://stackoverflow.com/a/22942120/1394353

de toute façon, installer iODBC via MacPorts

sudo port install libiodbc

Le manque de sql.h est déposé par MacPorts @ / opt / local/include

maintenant, dites à pip où il peut trouver les includes (c'est là que la réponse liée est devenue pratique):

pip install pyodbc --global-option=build_ext --global-option="-I/opt/local/include/"

0
répondu JL Peyret 2017-05-23 12:32:17

comme pip ne supporte plus l'option --no-install et l'option --download est dépréciée. J'ai eu à suivre les étapes suivantes.

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
0
répondu bfaskiplar 2017-09-19 10:10:36

j'ai rencontré le même problème aujourd'hui sur ubuntu 14.04. J'ai trouvé un gars dans le lien ci-dessous dit devrait installer unixodbc-dev.

https://code.google.com/p/pyodbc/issues/detail?id=55

Je l'ai fait, et puis le pip installer succès.

Espère que cela utile.

-1
répondu WanderInCode 2015-11-19 08:34:10

version OS: El Capitan 10.11.6 Version Python: 2.7.11 Version Pip: 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 .
-1
répondu Lili 2017-02-23 20:59:09