使用替代的unixODBC安装

3 投票
3 回答
2751 浏览
提问于 2025-04-17 04:55

我正在一个环境中工作,这里安装了unixODBC,并且这个软件是在一个组织范围内的中央共享驱动器上,但我们(真正的开发者)不能在里面安装驱动程序或数据源。这一切都很混乱,但我必须接受这个现实。

现在我正在尝试构建一个Python应用程序,目的是从这个Unix环境连接到一个mssql 2005服务器,所以我显然需要一些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 个回答

0

这个问题可能是因为它在查找全局的 ini 文件。你可以通过设置 ODBCSYSINI=/path/to/location/of/inifiles 来指定它查找 odbc.iniodbcinst.ini 文件的位置。

2

感谢上面的回答,这让我开始修改setup.py文件中的get_compiler_settings,让它不要使用默认的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')
6

在自定义环境中安装pyodbc会有点麻烦。你需要修改一个叫做 setup.py 的脚本,让它去你指定的位置寻找unixODBC。你可以在 get_compiler_settings 函数里加上类似下面的内容:

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

这样做可以帮助安装过程找到正确的文件。

撰写回答