2015-07-11 87 views
18

我试图在Heroku上安装PyODBC,但是在pip运行时我在日志中获得fatal error: sql.h: No such file or directory。我如何解决这个错误?在Heroku上安装PyODBC时找不到sql.h

+1

您是否曾经在Heroku上使用过这个版本? – cph

+1

@cph这个项目目前在Heroku上有这样的设置https://github.com/bmwant/pr-review-notifier –

回答

2

您需要unixODBC devel软件包。我不知道你在使用什么发行版,但你可以谷歌它和从源代码构建。

39

要跟进下面的答案...

例为Ubuntu:

sudo apt-get install unixodbc unixodbc-dev 

为CentOS实例:

sudo yum install unixODBC-devel 

在Windows上:

conn = pyodbc.connect('DRIVER={SQL Server};SERVER=yourserver.yourcompany.com;DATABASE=yourdb;UID=user;PWD=password') 

在Linux上:

conn = pyodbc.connect('DRIVER={FreeTDS};SERVER=yourserver.yourcompany.com;PORT=1433;DATABASE=yourdb;UID=user;PWD=password;TDS_VERSION=7.2') 
+0

嗨Flipper!感谢命令。我正在使用Git Bash for windows。你能建议我如何做到这一点。还有一件事是我可以在我的系统中本地安装pyodbc包。但是,当heroku服务器试图在服务器端安装相同的包时,我收到此错误。 –

+0

没问题!那么,您在Heroku上使用Windows进行开发和Linux生产?这可能会变得棘手(圣杯是让您的开发和生产环境尽可能相同)。首先,我会建议绝对使用virtualenv,然后在Windows/dev上使用pyodbc与SQL Server驱动程序,以及在Linux/prod Heroku上使用FreeTDS/unixODBC。我会修改上面的示例。 – FlipperPA

+0

非常感谢!我要试试这个。 –

-1

其他答案或多或少是正确的;您错过了适用于您的操作系统的unixodbc-dev[el]软件包;这就是pip需要从源码构建pyodbc

但是,更简单的选择是通过系统软件包管理器安装pyodbc。例如,在Debian/Ubuntu上,那将是apt-get install python-pyodbc。由于pyodbc与UnixODBC操作系统级别的软件包有很多编译的组件和接口,因此它可能更适合系统软件包,而不是Python/pip安装的软件包。

如果您正在编写分发代码,您仍然可以在您的requirements.txt文件中将其列为依赖项,但通过系统PM安装它通常会更容易。

+1

从操作系统存储库安装pyodbc的唯一问题是它们往往是pyodbc的*非常旧的*版本。 IIRC的Ubuntu储存库安装v3.0.7,而我写的这个当前稳定版本是v4.0.21,4.x在处理Unicode时比3.x好得多。 –

0

您可以添加的Heroku构建包预安装所需的第一

heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-apt 

在你的根目录添加Aptfile和仓库以及

unixodbc 
unixodbc-dev 
python-pyodbc 
libsqliteodbc 

它将安装你需要的一切贴切包在Heroku上使用pyodbcaioodbc包来自python