web-dev-qa-db-fra.com

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

En exécutant 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’a pas de sql.h sous/usr/include

Quelqu'un at-il réussi à installer pyodbc? Existe-t-il une solution de contournement connue?

36
Moshe

Comme vous l'avez remarqué, OSX Mavericks a supprimé les en-têtes SQL nécessaires à la compilation de PyODBC . Les étapes suivantes m'ont permis d'installer PyODBC:

  1. Assurez-vous que la bibliothèque iODBC est installée ( http://www.iodbc.org/ ).
  2. Téléchargez et extrayez les 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 pourrais aussi bien copier les fichiers sous [libiodbc_sources]/include/ dans mon /usr/include et simplement exécuter pip install pyodbc, mais je ne voulais pas ajouter de fichiers manuellement aux dossiers système.

33
m_vitaly

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

brew install unixodbc && pip install pyodbc

Cela fonctionne pour moi sur Mavericks.

55
Ryan Balfanz

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
30
dennisobrien

Voir mes instructions d'installation que j'ai écrites après quelques tentatives infructueuses des autres réponses fournies:

Tout 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 devons créer un lien vers le pilote, éditez /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 de test que nous utilisons nécessite la configuration d'un DSN. Modifiez donc /usr/local/etc/odbc.ini:

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

La configuration de votre DNS peut varier, vous devrez peut-être utiliser les directives TDS_Version ou Servername. Ce qui précède a fonctionné pour moi pour SQL Server 2008 R2. Maintenant, lancez la commande de 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 d’écriture (3.0.7) n’étant pas liée à unixODBC sous OS X, vous devez modifier setup.py. Téléchargez le paquet source et extrayez-le quelque part. Recherchez les lignes suivantes (146-147):

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

Et changez cette ligne:

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

dans:

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

Puis exécutez 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, effacez donc ce fichier. Vous voulez probablement sélectionner une base de données sur connect, changez donc votre ligne de connexion 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 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
bouke

La réponse de @ Vitaly ne me réjouissait pas, car il semblerait que le problème de la création de packages sur Mavericks soit lié au manque de prise en charge de la liaison en dur. Je n'arrivais pas à construire le paquet.

J'ai donc opté pour la deuxième suggestion de @ Vitaly, qui consistait à copier les fichiers nécessaires du répertoire [libiodbc_sources]/include/ vers /usr/include et l'installation a fonctionné. Voici une liste des fichiers que vous devrez copier:

  • sql.h
  • sqltypes.h
  • iodbcunix.h
  • sqlext.h
  • sqlucode.h
10
MFB

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

Exécution de Mac OS 10.11.1, Homebrew 0.9.5 et pip 7.1.2

9
Lothilius

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 de lignes de commande; c'est maintenant clang juste symlinked à gcc. L'indicateur --mno-fused-madd n'est pas pris en charge par clang (il en va de même pour beaucoup d'autres indicateurs).

Une solution pourrait être d’installer gcc à l’aide de homebrew ou d’une autre méthode et de lier symboliquement/usr/bin/gcc à un gcc approprié.

Une solution de contournement plus simple qui a fonctionné pour moi consiste à supprimer ces erreurs en les transformant en avertissements:

export CFLAGS=-Qunused-arguments

Après les paramètres que j'ai pu pip install pyodbc sans erreurs.

PS! Dans les futures versions 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

Refs:
https://bitbucket.org/cffi/cffi/issue/46/unused-mno-fused-madd-clang-warnings-on-oshttps: // coderwall.com/p/lqpp8wclang: erreur: option non prise en charge '-static-libgcc' sous Mac OSX Mavericks } _

2
asbjornenge

J'ai eu du succès avec Sudo port install py-pyodbc

1
Brian

Je viens de parcourir tout le processus sous Mac OS X; connexion à pyodbc vers MS SQL Server 2014. L'ensemble du processus est le suivant:

Pipeline de connexion:

pyodbc ----> iodbc ----> freetds ----> MS SQL Server 2014
  1. Construisez freetds (le connecteur/pilote 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!
    
  2. Construire iodbc (gestionnaire 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!
    
  3. Connectez pyodbc (wrapper Python ODBC) à iodbc:

    pip install pyodbc 
    
    //in python,
    
    conn = pyodbc.connect("DSN=mssqlserver;UID=xxx;PWD=xxxx") 
    
1
Hongli Deng

Comme pip ne supporte plus l'option --no-install et que l'option --download est obsolète. Je devais 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
bfaskiplar

Je vais ajouter mon 0,02 $ à cela. La réponse de Vitaly était la principale inspiration.

OSX 10.9.5, MacPorts 2.3.4, pip 8.1.2 (sans l'option --no-install), virtualenv 14.0.6

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

Quoi qu'il en soit, installez iODBC via MacPorts

Sudo port install libiodbc

Le fichier sql.h manquant est déposé par MacPorts @ / opt/local/include

Maintenant, dites à pip où il peut trouver les inclus (c’est là que la réponse liée s’est révélée utile):

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

0
JL Peyret