在OSX 10.9(Mavericks)上安装pyodbc失败

Mos*_*she 37 python macos pyodbc

跑步的时候pip install pyodbc,我明白了

In file included from .../build/pyodbc/src/buffer.cpp:12:
    .../build/pyodbc/src/pyodbc.h:52:10: fatal error: 'sql.h' file not found
    #include <sql.h>
             ^
    1 error generated.
    error: command 'cc' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)

似乎Mavericks在/ usr/include下没有sql.h

有没有人设法安装pyodbc?有一个已知的解决方法吗?

小智 58

您可以使用Homebrew以通常的方式安装unixodbc,然后通过pip安装pyodbc.

brew install unixodbc && pip install pyodbc
Run Code Online (Sandbox Code Playgroud)

这适用于小牛队.

  • 最初投票,因为它似乎工作.但是它安装正确,我无法连接它. (3认同)

m_v*_*aly 33

正如您注意到OSX Mavericks删除了PyODBC编译所需的sql头.按照这些步骤允许我安装PyODBC:

  1. 确保安装了iODBC库(http://www.iodbc.org/)
  2. 下载并提取iODBC来源
  3. pip install --no-install pyodbc
  4. cd [VIRTUAL_ENV]/build/pyodbc
  5. python setup.py build_ext --include-dirs=[LIBIODBC_SOURCES]/include/
  6. 运行pip install --no-download pyodbc:

    Installing collected packages: pyodbc
      Running setup.py install for pyodbc
    
        warning: no files found matching 'tests/*'
    Successfully installed pyodbc
    Cleaning up...
    
    Run Code Online (Sandbox Code Playgroud)

我也可以将文件复制[libiodbc_sources]/include/到我的文件中,/usr/include然后运行pip install pyodbc,但我不想手动将文件添加到系统文件夹中.

  • 使用最新版本的pip,步骤3变为`pip install --allow-external pyodbc --allow-unverified pyodbc --no-install pyodbc == 3.0.7`.请注意,不建议使用--no-install. (6认同)
  • 随着最新版本的pip,`--no-download`和`--no-install`消失了.我使用`pip install --download在scratch目录下载.pyodbc --no-binary pyodbc`,然后解压缩并进入untarred目录; 编辑`setup.py`以引用正确的ODBC链接库(在我的例子中为'iodbc'),然后是步骤5.最后,`pip install .`代替步骤6(必要时使用`--upgrade`). (6认同)
  • 有关此过程的详细说明.由于某种原因,我最终需要使用``-I``标志来代替``--include-dirs``.但它奏效了! (2认同)

den*_*ien 30

经过多次死胡同,这对我有用:

$ brew unlink unixodbc
$ brew install unixodbc  --universal
$ sudo pip install --upgrade --global-option=build_ext --global-option="-I/usr/local/include" --global-option="-L/usr/local/lib" --allow-external pyodbc --allow-unverified pyodbc pyodbc
Run Code Online (Sandbox Code Playgroud)


Bou*_*uke 14

在我们提供的其他答案的一些徒劳尝试之后,请参阅我写的安装说明:

首先,安装以下库:

$ brew install unixodbc
$ brew install freetds --with-unixodbc
Run Code Online (Sandbox Code Playgroud)

FreeTDS现在应该可以正常工作,无需配置:

$ tsql -S [IP or hostname] -U [username] -P [password]
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> ^D
Run Code Online (Sandbox Code Playgroud)

在unixODBC上,我们需要链接到驱动程序,编辑/usr/local/etc/odbcinst.ini:

[FreeTDS]
Description = TD Driver (MSSQL)
Driver = /usr/local/lib/libtdsodbc.so
Setup = /usr/local/lib/libtdsodbc.so
FileUsage = 1
Run Code Online (Sandbox Code Playgroud)

我们使用的测试命令需要配置DSN,因此请编辑/usr/local/etc/odbc.ini:

[MYDSN]
Driver = FreeTDS
Server = [IP address]
Port = 1433
Run Code Online (Sandbox Code Playgroud)

DNS的配置可能有所不同,您可能需要TDS_VersionServername指令.以上为SQL Server 2008 R2工作.现在,运行test命令:

$ isql MYDSN [username] [password] -v
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> ^D
Run Code Online (Sandbox Code Playgroud)

如果测试成功,您可以继续安装Python库pyodbc.当前版本的写入(3.0.7)不与OS X上的unixODBC链接,因此必须进行更改setup.py.下载源包并将其解压缩到某处.找到以下行(146-147):

    elif sys.platform == 'darwin':
        # OS/X now ships with iODBC.
Run Code Online (Sandbox Code Playgroud)

并改变这一行:

        settings['libraries'].append('iodbc')
Run Code Online (Sandbox Code Playgroud)

成:

        settings['libraries'].append('odbc')
Run Code Online (Sandbox Code Playgroud)

然后运行以下命令进行安装:

> python install .
Run Code Online (Sandbox Code Playgroud)

现在pyodbc应该工作:

import pyodbc
pyodbc.connect('DSN=MYDSN;UID=[username];PWD=[password]')
Run Code Online (Sandbox Code Playgroud)

您无需配置DSN odbc.ini,因此请清除该文件.您可能希望在连接上选择数据库,因此请将连接线更改为:

pyodbc.connect('DRIVER=FreeTDS;SERVER=[IP address];PORT=1433;DATABASE=[database];UID=[username];PWD=[password]')
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以链接到FreeTDS的库文件而不是使用odbcinst.ini,如下所示:

pyodbc.connect('DRIVER=/usr/local/lib/libtdsodbc.so;SERVER=[IP address];PORT=1433;DATABASE=[database];UID=[username];PWD=[password]')
Run Code Online (Sandbox Code Playgroud)


MFB*_*MFB 10

我对@ Vitaly的回答并不满意,因为在Mavericks上构建软件包似乎存在一个问题,即缺乏对硬链接的支持.我无法获得构建包.

所以我选择了@Vitaly的第二个建议,即将[libiodbc_sources]/include/目录中的必要文件复制到/usr/include安装工作中.以下是您需要复制的文件列表:

  • sql.h
  • sqltypes.h
  • iodbcunix.h
  • sqlext.h
  • sqlucode.h


Lot*_*ius 9

在尝试了其他一切建议后,这对我有用.

brew install unixodbc
sudo pip install --upgrade --global-option=build_ext --global-option="-I/usr/local/include" --global-option="-L/usr/local/lib" --allow-external pyodbc --allow-unverified pyodbc pyodbc
Run Code Online (Sandbox Code Playgroud)

运行Mac OS 10.11.1,Homebrew 0.9.5和pip 7.1.2


归档时间:

查看次数:

27103 次

最近记录:

8 年,1 月 前