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?
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:
- assurez-vous que la bibliothèque iODBC soit installée ( http://www.iodbc.org / )
- télécharger et extraire des sources iODBC
- Exécuter
pip install --no-install pyodbc
-
cd [VIRTUAL_ENV]/build/pyodbc
- Exécuter
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 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.
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.
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 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]')
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
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
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
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
-
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!
-
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!
-
Connect pyodbc (Python ODBC wrapper) pour iodbc:
pip install pyodbc //in python, conn = pyodbc.connect("DSN=mssqlserver;UID=xxx;PWD=xxxx")
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/"
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
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.
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 .