Windows上的pyodbc和Python 3.4
pyodbc 是一个非常好用的工具,但它的 Windows 安装程序只适用于特定的 Python 版本。随着 Python 3.4 的发布,现有的安装程序在注册表中找不到 3.3 时就会停止工作(尽管 3.4 是存在的)。
把 3.3 版本的 .pyd 和 .egg-info 文件复制到 3.4 的 site-packages 目录下似乎没有用。当尝试导入 pyodbc 时,会出现一个错误:ImportError: DLL load failed: %1 is not a valid Win32 application.
有没有什么特别的方法可以让 3.3 的文件正常工作?还是说我们只能等到 3.4 的安装程序版本发布?
3 个回答
我通过安装 pyodbc 3.0.10
解决了这个问题。最新版本的 pyodbc 在 Windows 上和 Python 3.4
不兼容,不能正常工作。
不过,pyodbc 3.0.10
对我来说是可以用的。
在命令提示符下安装的命令是:pip install pyodbc 3.0.10
你有没有试着从这里下载?那里有一个不官方的3.4版本。我自己简单测试了一下,感觉运行得不错。
不同版本的Python大多数情况下是不能直接互相兼容的,因此任何编译过的扩展(比如pyodbc)只能在特定版本的Python上使用。
需要注意的是,纯Python包(完全用Python编写,没有其他依赖的包)不需要编译,因此可以支持多个Python版本。
另外,虽然从技术上讲,可以编写一个编译过的扩展,使其同时适用于Python 3.2、3.3、3.4以及未来的3.x版本,但这需要遵循一个叫做“稳定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。当然,了解一下pypyodbc
也是有用的,以防将来Python的新版本发布时pyodbc
又跟不上。]