2015-07-11 113 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