Использование альтернативной установки unixODBC - PullRequest
3 голосов
/ 25 октября 2011

Я работаю в среде, в которой unixODBC установлен на центрально смонтированном диске всей организации, но нам (фактическим разработчикам) не разрешается устанавливать в него драйверы или источники данных. Это все задом наперед, но я должен жить с этим.

Сейчас я пытаюсь создать приложение python, которое подключается к серверу mssql 2005 из этого unix enviro, поэтому мне, очевидно, нужны некоторые драйверы sql!

Я обошёл свое отсутствие доступа к предустановленному unixODBC, переустановив unixODBC на той части диска, над которой у меня есть полный контроль. Я установил freeTDS и настроил все так, чтобы я мог успешно подключиться к серверу с помощью isql - отлично!

Теперь единственная проблема в том, что когда я выполняю строку в моей программе на python (которая использует pyodbc), например:

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

Я получаю

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

Я предполагаю, что это потому, что pyodbc все еще ищет исходную установку unixODBC, а не мою локальную. Вот мне и стало интересно:

Как настроить мои сценарии для поиска локальной установки unixODBC вместо той, которая установлена ​​на главном диске

Ответы [ 3 ]

6 голосов
/ 25 октября 2011

pyodbc сложно установить в пользовательских настройках.Вам нужно отредактировать скрипт setup.py, чтобы искать unixODBC из вашего пользовательского местоположения, добавив что-то вроде

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

в get_compiler_settings функцию.

2 голосов
/ 25 октября 2013

Спасибо за приведенный выше ответ - он заставил меня отредактировать get_compiler_settings в setup.py, чтобы запретить ему использовать iodbc по умолчанию.

Что сработало для меня (OS X 10.9, pyodbc 3.0.7):

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')
0 голосов
/ 01 ноября 2011

Возможно, проблема в том, что он ищет в глобальном INI-файле. Вы можете установить местоположение, в котором он ищет файлы odbc.ini и odbcinst.ini, определив ODBCSYSINI=/path/to/location/of/inifiles

...