2014-04-25 25 views
18

pyodbc è una cosa molto carina, ma gli installer di Windows funzionano solo con la loro versione Python molto specifica. Con il rilascio di Python 3.4, gli unici programmi di installazione disponibili si fermano appena non visualizzano 3.3 nel registro (sebbene il 3.4 sia certamente disponibile).pyodbc e python 3.4 su Windows

La copia dei file .pyd e .egg -info da un'installazione 3.3 nella directory dei siti Web 3.4 non sembra fare il trucco. Quando si importa pyodbc, viene lanciato un ImportError: ImportError: DLL load failed: %1 is not a valid Win32 application.

C'è una salsa segreta che può essere aggiunta per far funzionare correttamente il file 3.3? O dobbiamo solo aspettare una versione di installazione 3.4?

+1

Un interruttore a pypyodbc può essere in ordine, se non c'è niente di semplice da fare. – steegness

+2

Per quello che vale, 'pyodbc' è stato aggiornato molto recentemente (fine aprile 2015) e ora supporta Python 3.4. –

risposta

22

Le diverse versioni di Python sono (per la maggior parte) non compatibili con i binari, e quindi qualsiasi estensione compilata (come pyodbc) funzionerà solo per una versione specifica.

Si noti che i pacchetti di puro Python (quelli completamente scritti in Python e che non hanno dipendenze non Python) non hanno bisogno di essere compilati e quindi possono essere scritti per supportare più versioni di Python.

Si noti inoltre che è tecnicamente possibile per un'estensione compilato per essere scritto in modo tale che funziona per Python 3.2 e 3.3, 3.4, e il futuro del 3.x a venire, ma devono limitarsi a il "stable ABI" come specificato da PEP 384, e la maggior parte delle estensioni non lo fanno. Per quanto ne so, pyodbc non è limitato all'ABI stabile e deve essere compilato separatamente per ogni versione di Python.

Detto questo, è anche possibile compilare la propria versione di pyodbc dal sorgente, purché si disponga degli strumenti e delle competenze necessarie. (Ma suppongo che tu stia facendo questa domanda, non lo fai. Neanche io, altrimenti includerei alcuni suggerimenti in questa risposta.)

Come hai già commentato, pypyodbc potrebbe essere la soluzione migliore, dato che si tratta di un pacchetto Python puro.

Installazione pypyodbc può essere fatto tramite la riga di comando:

C:\Python34\Scripts>pip install pypyodbc 

Usandolo come rimpiazzo di pyodbc può essere fatto utilizzando:

import pypyodbc as pyodbc 

[La versione corrente del pyodbc al il tempo di questa modifica è 3.0.10 e supporta Python 3.4. Naturalmente, è ancora utile essere a conoscenza di pypyodbc in caso pyodbc rimane indietro di nuovo quando il futuro versioni di Python vengono rilasciati.]

+0

* "è ancora utile essere a conoscenza di pypyodbc nel caso in cui pyodbc cada di nuovo" * - D'accordo, anche se sfortunatamente sembra che lo sviluppo di pypyodbc sia stato bloccato per un po 'di tempo. Un sacco di segnalazioni di bug non riconosciute e richieste di pull ignorate (l'ultima volta che ho controllato, comunque). –

+0

@GordThompson: In effetti, pypyodbc sembra essere morto, mentre pyodbc ha avuto una serie di attività tra la fine del 2016 e l'inizio del 2017 che lo hanno raggiunto fino a 3,6, con buone prospettive che il creatore/manutentore sarà in grado di tenere , a giudicare dal fatto che il suo ultimo commit è uno script per aiutare ad automatizzare il processo di compilazione di Windows. –

+0

Non c'è dubbio che almeno una parte del motivo della rinnovata attività con pyodbc è che ora è ufficialmente supportato da Microsoft (annunciato all'inizio di dicembre 2016, IIRC). –

9

Hai provato a scaricare da here? Ha una build non ufficiale per 3.4. Ho fatto un test rapido, sembra che stia funzionando bene per me.

+0

Viene visualizzato un messaggio di errore "ImportError: caricamento DLL non riuscito:% 1 non è un'applicazione Win32 valida."; solo quando provo ad installarlo nella mia directory dei pacchetti Anaconda. –

+0

Viene visualizzato un messaggio di errore "ImportError: caricamento DLL non riuscito:% 1 non è un'applicazione Win32 valida."; solo quando provo ad installarlo nella mia directory dei pacchetti Anaconda. Penso che sia perché il mio Anaconda è a 64 bit, e quello che ho installato era la versione win32. [Come spiegato qui] (http://stackoverflow.com/a/25398326/1175496) Quando ho usato questo eseguibile di download a 64 bit, invece, ha funzionato: pyodbc-3.0.7.win-amd64-py3.4.exe –

+0

Questo funziona per me a 3,4 32 bit. Grazie! – pa1983

0

Ho risolto il problema installando pyodbc 3.0.10. L'ultima versione di pyodbc non ha funzionato su Windows con Python 3.4

Tuttavia pyodbc 3.0.10 ha comando lavoro per me

Installare il prompt dei comandi: pip install pyodbc 3.0.10

Problemi correlati