2015-07-11 7 views
18

Sto tentando di installare PyODBC su Heroku, ma ottengo fatal error: sql.h: No such file or directory nei log quando viene eseguito pip. Come posso risolvere questo errore?sql.h non trovato durante l'installazione di PyODBC su Heroku

+1

Hai mai funzionato su Heroku? – cph

+1

@ cph Questo progetto funziona attualmente su Heroku con tale impostazione https://github.com/bmwant/pr-review-notifier –

risposta

2

È necessario il pacchetto di sviluppo unixODBC. Non so quale distro stai usando ma puoi google e costruire da sorgente.

39

di follow-up sulla risposta qui sotto ...

Esempio per Ubuntu:

sudo apt-get install unixodbc unixodbc-dev 

Esempio per CentOS:

sudo yum install unixODBC-devel 

Su Windows:

conn = pyodbc.connect('DRIVER={SQL Server};SERVER=yourserver.yourcompany.com;DATABASE=yourdb;UID=user;PWD=password') 

Su Linux:

conn = pyodbc.connect('DRIVER={FreeTDS};SERVER=yourserver.yourcompany.com;PORT=1433;DATABASE=yourdb;UID=user;PWD=password;TDS_VERSION=7.2') 
+0

Hi Flipper! Grazie per i comandi. Sto usando Git Bash per Windows. Potete per favore suggerire come faccio questo. Un'altra cosa è che sono in grado di installare il pacchetto pyodbc localmente nel mio sistema. Ma quando il server heroku sta tentando di installare lo stesso pacchetto sul lato server, sto ricevendo questo errore. –

+0

Nessun problema! Quindi, stai usando Windows per lo sviluppo e Linux in produzione su Heroku? Questo può diventare complicato (il Santo Graal è che i tuoi ambienti di sviluppo e produzione siano il più identici possibile). Per prima cosa suggerirei sicuramente di usare virtualenv, quindi usare pyodbc con il driver SQL Server su Windows/dev e FreeTDS/unixODBC su Linux/prod Heroku. Modificherò il mio esempio sopra. – FlipperPA

+0

Grazie mille! Ci proverò. –

-1

Le altre risposte sono più o meno corrette; ti manca il pacchetto unixodbc-dev[el] per il tuo sistema operativo; questo è ciò che è necessario per pyodbcpip dalla fonte.

Tuttavia, un'opzione molto più semplice è installare pyodbc tramite il gestore di pacchetti di sistema. Ad esempio, su Debian/Ubuntu sarebbe apt-get install python-pyodbc. Poiché pyodbc ha molti componenti e interfacce compilati pesantemente con i pacchetti a livello di sistema operativo UnixODBC, è probabilmente più adatto per un pacchetto di sistema che non per uno Python/pip installato.

È ancora possibile elencarlo come dipendenza nei file requirements.txt se si sta eseguendo il codice per la distribuzione, ma di solito sarà più semplice installarlo tramite il sistema PM.

+1

L'unico problema con l'installazione di pyodbc dai repository del sistema operativo è che tendono ad essere * veramente vecchie * versioni di pyodbc. IIRC i repository di Ubuntu installano la v3.0.7 mentre la versione stabile corrente mentre scrivo questo è v4.0.21, e 4.x è molto meglio di 3.x alla gestione di Unicode. –

0

È possibile aggiungere Heroku costruire pack per preinstallare richiesto pacchetti apt primi

heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-apt 

Aggiungi Aptfile nella root directory e al repository così

unixodbc 
unixodbc-dev 
python-pyodbc 
libsqliteodbc 

verrà installato tutto il necessario per funziona con i pacchetti pyodbc o aioodbc da python su Heroku