在Heroku安装PyODBC时出现了sql.h未找到的错误。

89

我正在尝试在Heroku安装PyODBC,但是当pip运行时,在日志中遇到fatal error: sql.h: No such file or directory错误。我该如何解决这个问题?


1
你在Heroku上成功运行过这个吗? - cph
1
@cph 这个项目目前可以在Heroku上运行,具体设置请见https://github.com/bmwant/pr-review-notifier。 - Most Wanted
7个回答

177

以下是对下面回答的跟进:

以Ubuntu为例:

sudo apt-get install unixodbc unixodbc-dev

CentOS的示例:

sudo yum install unixODBC-devel

针对 Fedora 的示例:

sudo dnf 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')

没问题!所以,你在开发时使用Windows,在Heroku上的生产环境中使用Linux?这可能会变得棘手(至关重要的是让你的开发和生产环境尽可能相同)。首先,我建议一定要使用virtualenv,然后在Windows/dev上使用pyodbc与SQL Server驱动程序,在Linux/prod Heroku上使用FreeTDS/unixODBC。我将修改上面的示例。 - FlipperPA
非常感谢!我会尝试的。 - shashi kanth
1
有人在Heroku上搞定了吗?现在似乎没有支持django-pyodbc的构建包可用。 - cph
你能否建议我如何解决在使用MongoDB作为数据库时遇到的错误?Python代码连接到云中的Mongodb数据库,当我尝试推送到Heroku时出现相同的错误。谢谢。 - mari
1
对于OSX,可以使用brew install unixodbc进行安装。 - northtree
显示剩余3条评论

14

您可以添加Heroku构建包以先预安装所需的apt软件包

heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-apt
在您的根目录中添加Aptfile文件并将其提交到存储库中。
unixodbc
unixodbc-dev
python-pyodbc
libsqliteodbc

这将安装在Heroku上使用Python的pyodbcaioodbc包所需的一切。


3
完美运作!尝试了很多其他的odbc编译包,但这个确实行得通。感谢您提供它。 - Afsan Abdulali Gujarati
Aptfile是一个文件,就像我们创建的Procfile一样吗?(我对此很陌生) - MoonLight
1
“在你的根目录中添加Aptfile文件,并将其添加到仓库中” 你要怎么做呢? - MoonLight

8

您需要安装unixODBC开发包。我不知道您使用的是哪个发行版,但您可以通过谷歌搜索并从源代码构建。


3

您的计算机上没有必需的ODBC头文件。 您需要运行以下命令以安装g++。

yum install unixODBC-devel

1
其他答案或多或少都是正确的;您的操作系统缺少unixodbc-dev[el]包;这是pip构建pyodbc所需的。但是,更简单的选择是通过系统包管理器安装pyodbc。例如,在Debian/Ubuntu上,可以使用apt-get install python-pyodbc。由于pyodbc有许多编译组件并与UnixODBC操作系统级软件包密切交互,因此它可能更适合作为系统包而不是Python/pip安装的软件包。如果您正在制作分发代码,则仍然可以将其列为依赖项在您的requirements.txt文件中,但通常最好通过系统PM安装它。

1
从操作系统存储库安装pyodbc的唯一问题是它们往往是非常古老的pyodbc版本。如果我没记错,Ubuntu存储库安装的是v3.0.7,而我撰写本文时当前稳定版本是v4.0.21,4.x在处理Unicode方面比3.x好得多。 - Gord Thompson

1

我最近在Heroku看到了这个错误。为了解决这个问题,我采取了以下步骤:

  1. 在根文件夹中添加Apt File,包括以下内容: unixodbc unixodbc-dev python-pyodbc libsqliteodbc

  2. 提交更改

  3. 运行heroku buildpacks:clear

  4. 运行heroku buildpacks:add --index 1 heroku-community/apt

  5. 推送到Heroku

对我来说,问题是之前安装了Python的构建包,但实际上并不需要。通过运行heroku buildpacks:clear,我删除了所有不必要的构建包,然后再添加所需的构建包。因此,如果您按照这些步骤进行操作,请确保记录所需的构建包。在执行这些步骤之前,请运行heroku buildpacks以查看您已有的构建包。


0

RedHat/CentOS: dnf install -y unixODBC-devel 连同unixODBC安装一起进行


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接