2011-10-24 4 views
3

Je travaille dans un environnement où unixODBC est installé sur un lecteur central monté au niveau de l'organisation, mais nous (les développeurs actuels) ne sommes pas autorisés à installer des pilotes ou des sources de données. Tout est en arrière mais je dois vivre avec.Utilisation de l'installation unixODBC alternative

En ce moment j'essaie de construire une application python qui se connecte à un serveur mssql 2005 à partir de cet enviro unix, donc j'ai évidemment besoin de pilotes sql! J'ai contourné mon manque d'accès à l'unixODBC préinstallé en réinstallant unixODBC sur une partie du lecteur sur lequel j'ai un contrôle total. J'ai installé freeTDS et tout configuré pour que je puisse me connecter avec succès au serveur avec isql - super!

Maintenant, le seul problème est, quand j'exécute une ligne dans mon programme python (qui utilise pyodbc) comme:

import pyodbc 
pyodbc.connect("DSN=<dsn_name>;UID=...;PWD=...", autocommit=True) 

Je reçois

('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnectW)') 

Je suppose que cela est dû au fait pyodbc est cherche toujours l'installation originale d'unixODBC et pas mon local. Alors je me demandais:

Comment puis-je configurer mes scripts pour chercher mon unixODBC installation locale au lieu de celui installé sur le disque principal

Répondre

6

pyodbc est difficile à installer dans des configurations personnalisées. Vous devez modifier le script setup.py pour rechercher le unixODBC à partir de votre emplacement personnalisé en ajoutant quelque chose comme

settings['include_dirs'] = ['/opt/local/include'] 
settings['library_dirs'] = ['/opt/local/lib'] 

à get_compiler_settings fonction.

+0

Pouvez-vous préciser un peu? Je n'ai jamais vraiment joué avec setup.py et je ne suis pas sûr de ce que je fais. – matrix10657

+0

En supposant que vous utilisez [pyodbc 2.1.11] (http://code.google.com/p/pyodbc/source/browse/setup.py?name=2.1.11), ajoutez les lignes mentionnées ci-dessous à la ligne numéro 142 Assurez-vous simplement que les chemins pointent vers vos répertoires d'installation personnalisés. – tuomur

+0

Thx @ eclaird, J'ai eu le même problème sur OS X, où Apple inclus iODBC ne fonctionne pas pour la version MSSQL à laquelle je dois me connecter. J'ai eu des problèmes pour construire pyodbc contre une installation différente de odbc, mais votre solution a fonctionné comme un charme =) – Justin

0

Le problème est probablement parce qu'il regarde dans le fichier ini global. Vous pouvez définir l'emplacement où il recherche les fichiers odbc.ini et odbcinst.ini en définissant ODBCSYSINI=/path/to/location/of/inifiles

2

Merci pour la réponse ci-dessus - il m'a fait modifier les get_compiler_settings dans setup.py pour lui dire de ne pas utiliser la iodbc par défaut.

Ce qui a fonctionné pour moi (OS X 10.9, pyodbc 3.0.7) était:

elif sys.platform == 'darwin': 
    # OS/X now ships with iODBC. 
    #settings['libraries'].append('iodbc') 

    # but I don't want to use iodbc, I want to use brewed unixodbc 
    settings['libraries'].append('odbc') 
Questions connexes