Windows上的pyodbc和Python 3.4

19 投票
3 回答
23522 浏览
提问于 2025-04-18 04:15

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 个回答

0

我通过安装 pyodbc 3.0.10 解决了这个问题。最新版本的 pyodbc 在 Windows 上和 Python 3.4 不兼容,不能正常工作。

不过,pyodbc 3.0.10 对我来说是可以用的。

在命令提示符下安装的命令是:pip install pyodbc 3.0.10

9

你有没有试着从这里下载?那里有一个不官方的3.4版本。我自己简单测试了一下,感觉运行得不错。

23

不同版本的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又跟不上。]

撰写回答