在 Heroku 上安装 PyODBC 时找不到 sql.h

Posted

技术标签:

【中文标题】在 Heroku 上安装 PyODBC 时找不到 sql.h【英文标题】:sql.h not found when installing PyODBC on Heroku 【发布时间】:2015-09-29 22:23:27 【问题描述】:

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

【问题讨论】:

你有没有让这个在 Heroku 上工作? @cph 这个项目目前在 Heroku 上使用这样的设置 github.com/bmwant/pr-review-notifier 【参考方案1】:

要跟进下面的答案...

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

【讨论】:

嗨 Flipper!感谢您的命令。我正在为 Windows 使用 Git Bash。你能建议我怎么做吗?另一件事是我能够在我的系统中本地安装 pyodbc 包。但是当 heroku 服务器尝试在服务器端安装相同的包时,我收到了这个错误。 没问题!那么,您在 Heroku 上使用 Windows 进行开发并在生产中使用 Linux?这可能会变得很棘手(圣杯是让您的开发和生产环境尽可能相同)。首先,我建议绝对使用 virtualenv,然后在 Windows / dev 上使用 pyodbc 和 SQL Server 驱动程序,在 Linux / prod Heroku 上使用 FreeTDS/unixODBC。我将修改上面的示例。 非常感谢!我要试试这个。 让我知道它是否有效。我还强烈建议您尝试让您的开发和生产环境至少在同一个操作系统上运行。祝你好运。 有人让它在 Heroku 上工作吗?现在支持 django-pyodbc 的构建包似乎都没有工作【参考方案2】:

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

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

Aptfile 添加到您的目录根目录和存储库中

unixodbc
unixodbc-dev
python-pyodbc
libsqliteodbc

它将安装您在 Heroku 上使用来自 python 的 pyodbcaioodbc 包所需的一切

【讨论】:

工作就像魅力!为 odbc 尝试了许多其他构建包,但这个确实有效。感谢您提出。 Aptfile 是不是和我们创建的 ProcFile 一样的文件? (我是新手) 我该怎么做“在你的目录根目录和存储库中添加 Aptfile”【参考方案3】:

您需要 unixODBC 开发包。我不知道你使用的是什么发行版,但你可以用谷歌搜索它并从源代码构建。

【讨论】:

【参考方案4】:

您的机器上没有所需的 ODBC 头文件。 您需要运行以下命令来安装 g++

yum install unixODBC-devel

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

从操作系统存储库安装 pyodbc 的唯一问题是它们往往是 非常旧 版本的 pyodbc。 IIRC Ubuntu 存储库安装 v3.0.7,而我写这篇文章的当前稳定版本是 v4.0.21,4.x 在处理 Unicode 方面比 3.x 好得多。【参考方案6】:

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

    Apt File 添加到根文件夹,并带有以下内容: unixodbc unixodbc-dev python-pyodbc libsqliteodbc

    提交

    运行heroku buildpacks:clear

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

    推送到 Heroku

对我来说,问题是我之前安装了 python 的 buildpack,这不是必需的。通过运行heroku buildpacks:clear我删除了所有不需要的 buildpacka,然后添加回我需要的那个。因此,如果您确实遵循这些步骤,请务必记下您需要的构建包。在执行这些步骤之前,要查看您已运行 heroku buildpacks 的构建包。

【讨论】:

【参考方案7】:

红帽/CentOS: dnf install -y unixODBC-devel 连同 unixODBC 安装

【讨论】:

以上是关于在 Heroku 上安装 PyODBC 时找不到 sql.h的主要内容,如果未能解决你的问题,请参考以下文章

错误:部署到 heroku 时找不到模块“webpack”

Discord.js 我的机器人在 Heroku 上托管时找不到任何父或子频道

Heroku 部署和 pyodbc

在 OSX 上使用 pip 安装模块,但在导入时找不到

使用 get-pip 在 OSX 上安装时找不到 Pip 命令 [重复]

使用 DigitalOcean 在 CentOS 7 上安装 laravel 5 时找不到 PDO 驱动程序