我正在尝试在Heroku安装PyODBC,但是当pip运行时,在日志中遇到fatal error: sql.h: No such file or directory
错误。我该如何解决这个问题?
以下是对下面回答的跟进:
以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')
brew install unixodbc
进行安装。 - northtree您可以添加Heroku构建包以先预安装所需的apt软件包
heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-apt
在您的根目录中添加Aptfile
文件并将其提交到存储库中。unixodbc
unixodbc-dev
python-pyodbc
libsqliteodbc
这将安装在Heroku上使用Python的pyodbc
或aioodbc
包所需的一切。
您需要安装unixODBC开发包。我不知道您使用的是哪个发行版,但您可以通过谷歌搜索并从源代码构建。
您的计算机上没有必需的ODBC头文件。 您需要运行以下命令以安装g++。
yum install unixODBC-devel
unixodbc-dev[el]
包;这是pip
构建pyodbc
所需的。但是,更简单的选择是通过系统包管理器安装pyodbc
。例如,在Debian/Ubuntu上,可以使用apt-get install python-pyodbc
。由于pyodbc
有许多编译组件并与UnixODBC操作系统级软件包密切交互,因此它可能更适合作为系统包而不是Python/pip安装的软件包。如果您正在制作分发代码,则仍然可以将其列为依赖项在您的requirements.txt
文件中,但通常最好通过系统PM安装它。我最近在Heroku看到了这个错误。为了解决这个问题,我采取了以下步骤:
在根文件夹中添加Apt File
,包括以下内容:
unixodbc
unixodbc-dev
python-pyodbc
libsqliteodbc
提交更改
运行heroku buildpacks:clear
运行heroku buildpacks:add --index 1 heroku-community/apt
推送到Heroku
对我来说,问题是之前安装了Python的构建包,但实际上并不需要。通过运行heroku buildpacks:clear
,我删除了所有不必要的构建包,然后再添加所需的构建包。因此,如果您按照这些步骤进行操作,请确保记录所需的构建包。在执行这些步骤之前,请运行heroku buildpacks
以查看您已有的构建包。
RedHat/CentOS:
dnf install -y unixODBC-devel
连同unixODBC安装一起进行