web-dev-qa-db-fra.com

pyodbc et python 3.4 sous Windows

pyodbc est une très belle chose, mais les installateurs Windows ne fonctionnent qu'avec leur version python très spécifique. Avec la version 3.4 de Python, les seuls installateurs disponibles s’arrêtent une fois qu’ils ne voient pas la version 3.3 dans le registre (même si la version 3.4 existe certainement).

Copier les fichiers .pyd et .Egg-info depuis une installation 3.3 dans le répertoire site-packages 3.4 ne semble pas faire l'affaire. Lors de l'importation de pyodbc, une erreur ImportError est générée: ImportError: DLL load failed: %1 is not a valid Win32 application.

Existe-t-il une sauce secrète qui peut être ajoutée pour que le fichier 3.3 fonctionne correctement? Ou devons-nous simplement attendre une version de l’installateur 3.4?

18
steegness

Les différentes versions de Python ne sont (pour la plupart) pas compatibles avec les fichiers binaires, de sorte que toute extension compilée (telle que pyodbc) ne fonctionnera que pour une version spécifique.

Notez que les packages pur-Python (ceux qui sont complètement écrits en Python et qui n'ont pas de dépendance non-Python) n'ont pas besoin d'être compilés et peuvent donc être écrits pour prendre en charge plusieurs versions de Python.

Notez également qu'il est techniquement possible de rédiger une extension compilée de telle sorte qu'elle fonctionne pour Python 3.2 ainsi que pour 3.3, 3.4 et les futures 3.x à venir, mais ils doivent se limiter au "ABI stable" comme spécifié par PEP 384 , et la plupart des extensions ne le font pas. Pour autant que je sache, pyodbc ne se limite pas à l’ABI stable et doit être compilé séparément pour chaque version de Python.

Cela dit, il est également possible de compiler votre propre version de pyodbc à partir du code source, à condition de disposer des outils et de l'expertise nécessaires. (Mais je suppose que si vous posez cette question, vous ne le ferez pas. Moi non plus, sinon j'inclurais quelques astuces dans cette réponse.)

Comme vous l'avez déjà commenté, pypyodbc est peut-être votre meilleur choix, car il s'agit d'un package pur-Python.

L'installation de pypyodbc peut être effectuée via la ligne de commande: 

C:\Python34\Scripts>pip install pypyodbc

Son utilisation en remplacement immédiat de pyodbc peut être réalisée à l'aide de:

import pypyodbc as pyodbc

[La version actuelle de pyodbc au moment de cette modification est 3.0.10 et prend en charge Python 3.4. Bien sûr, il est toujours utile de connaître pypyodbc au cas où pyodbc redescendrait lors de la publication des futures versions de Python.]

23
John Y

Avez-vous essayé de télécharger de ici ? Il a une version non officielle pour 3.4. J'ai fait un test rapide moi-même, on dirait que ça fonctionne bien pour moi.

9
xbb

J'ai corrigé cela en installant pyodbc 3.0.10. La dernière version de pyodbc ne fonctionnait pas sous Windows avec Python 3.4

Cependant pyodbc 3.0.10 a fonctionné pour moi

Commande d'installation à l'invite de commande: pip install pyodbc 3.0.10

0
coder