2014-04-25 111 views
18

pyodbc是一個非常好的事情,但Windows安裝程序只與他們的非常具體的Python版本。隨着Python 3.4的發佈,只有當他們在註冊表中看不到3.3時,唯一可用的安裝程序纔會停止(儘管3.4當然存在)。pyodbc和python 3.4在Windows

複製從3.3安裝到3.4站點包目錄.pyd和.egg信息文件似乎並沒有這樣的伎倆。當導入pyodbc時,會引發ImportError:ImportError: DLL load failed: %1 is not a valid Win32 application.

是否有祕密醬可以添加到使3.3文件正常工作?或者我們只需要等待3.4安裝程序版本?

+1

切換到pypyodbc可能是爲了,如果沒有什麼簡單的事情可以做到。 – steegness

+2

對於它的價值,'pyodbc'已經在最近更新(2015年4月下旬),現在支持Python 3.4。 –

回答

22

不同版本的Python是(大部分)不是二進制兼容,因此任何編譯的擴展(如pyodbc)將針對特定版本纔有效。

需要注意的是純Python包(即完全用Python編寫的,並沒有非Python的依賴關係的那些)不需要進行編譯,從而可以寫入支持多個Python版本。

另請注意,它是在技術上可行的爲編寫的擴展,以便它適用於Python 3.2以及3.3,3.4和將來的3.x的來,但他們必須限制自己如PEP 384所指定的"stable ABI",並且大多數擴展不這樣做。據我所知,pyodbc並不侷限於穩定的ABI,必須爲每個Python版本單獨編譯。

這就是說,它也可以從源代碼編譯自己的pyodbc的版本,只要你有所需的工具和專業知識。 (但我猜如果你問這個問題,你不這樣做,否則我會在這個答案中包含一些提示。)

正如你已經評論過的,pypyodbc可能是你最好的選擇,因爲它是一個純Python包。

安裝pypyodbc可以通過命令行來完成:

C:\Python34\Scripts>pip install pypyodbc 

使用它作爲簡易替代pyodbc的可利用來完成:

import pypyodbc as pyodbc 

[的pyodbc當前版本在這個編輯的時間是3.0.10,它支持Python 3.4。當然,它仍然是有用的是pyodbc落後的Python版本發佈再次未來情況時知道pypyodbc]

+0

*「在pyodbc再次落後的情況下,瞭解pypyodbc仍然很有用」* - 同意,儘管很不幸,現在pypyodbc的開發已經停滯了一段時間。許多未確認的錯誤報告和忽略拉取請求(無論如何我上次檢查)。 –

+0

@GordThompson:的確,pypyodbc似乎已經死了,而pyodbc在2016年末和2017年初發生了一連串的活動,一直到3.6,所有創作者/維護者都能夠跟上,這是由他的最新提交是一個腳本來幫助自動化Windows構建過程。 –

+0

毫無疑問,重新開始使用pyodbc的原因至少有一部分是由微軟官方支持(2016年12月初宣佈,IIRC)。 –

9

你嘗試從here下載?它有3.4的非官方版本。我自己做了一個快速測試,看起來對我來說工作得很好。

+0

我收到一個錯誤「ImportError:DLL加載失敗:%1不是有效的Win32應用程序。」;只有當我嘗試將它安裝到我的Anaconda軟件包目錄中。 –

+0

我收到一個錯誤「ImportError:DLL加載失敗:%1不是有效的Win32應用程序。」;只有當我嘗試將它安裝到我的Anaconda軟件包目錄中。我認爲這是因爲我的Anaconda是64位的,而我安裝的是win32版本。 [這裏解釋](http://stackoverflow.com/a/25398326/1175496)當我使用這個64位下載可執行文件,它的工作原理:pyodbc-3.0.7.win-amd64-py3.4.exe –

+0

這在3.4 32位上適用於我。謝謝! – pa1983

0

我通過安裝pyodbc 3.0.10固定這一點。 pyodbc的最新版本並沒有在Windows與Python 3.4

工作,但是pyodbc 3.0.10爲我所做的

工作在命令提示符下安裝命令:pip install pyodbc 3.0.10