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?
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:
pip install --no-install pyodbc
cd [VIRTUAL_ENV]/build/pyodbc
python setup.py build_ext --include-dirs=[LIBIODBC_SOURCES]/include/
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.
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.
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
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]')
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:
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
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 } _
J'ai eu du succès avec Sudo port install py-pyodbc
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
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!
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!
Connectez pyodbc (wrapper Python ODBC) à iodbc:
pip install pyodbc
//in python,
conn = pyodbc.connect("DSN=mssqlserver;UID=xxx;PWD=xxxx")
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
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/"