Windows 上的 pyodbc 和 python 3.4

Posted

技术标签:

【中文标题】Windows 上的 pyodbc 和 python 3.4【英文标题】:pyodbc and python 3.4 on Windows 【发布时间】:2014-06-11 12:24:41 【问题描述】:

pyodbc 是一个非常好的东西,但是 Windows 安装程序只能使用他们非常特定的 python 版本。随着 Python 3.4 的发布,唯一可用的安装程序一旦在注册表中看不到 3.3 就会停止(尽管 3.4 肯定存在)。

将 .pyd 和 .egg-info 文件从 3.3 安装复制到 3.4 site-packages 目录似乎并不能解决问题。导入pyodbc时,抛出ImportError:ImportError: DLL load failed: %1 is not a valid Win32 application.

有没有什么秘方可以让3.3文件正常工作?还是我们只需要等待 3.4 安装程序版本?

【问题讨论】:

如果没有什么简单的事情可以做的话,可能需要切换到 pypyodbc。 不管怎样,pyodbc 最近已更新(2015 年 4 月下旬),现在支持 Python 3.4。 【参考方案1】:

不同版本的 Python(大部分)不兼容二进制,因此任何已编译的扩展(例如 pyodbc)仅适用于特定版本。

请注意,纯 Python 包(完全用 Python 编写且没有非 Python 依赖项的包)不需要编译,因此可以编写为支持多个 Python 版本。

还请注意,技术上可以编写一个已编译的扩展,使其适用于 Python 3.2 以及 3.3、3.4 和未来的 3.x,但它们有将自己限制在PEP 384 指定的"stable ABI" 范围内,并且大多数扩展都不会这样做。据我所知,pyodbc不限于stable 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 再次落后。]

【讨论】:

“如果 pyodbc 再次落后,了解 pypyodbc 仍然很有用” - 同意,尽管不幸的是,看起来 pypyodbc 的开发已经停滞了很长一段时间。大量未确认的错误报告和忽略的拉取请求(我最后一次检查,无论如何)。 @GordThompson:确实,pypyodbc 似乎已经死了,而 pyodbc 在 2016 年末和 2017 年初有一系列活动,一路飙升至 3.6,创造者/维护者将能够跟上,从他的最新提交是一个帮助自动化 Windows 构建过程的脚本来判断。 毫无疑问,pyodbc 更新活动的至少部分原因是它现在得到了微软的正式支持(2016 年 12 月上旬宣布,IIRC)。【参考方案2】:

您是否尝试从here 下载?它有一个非官方的 3.4 版本。我自己做了一个快速测试,看起来对我来说效果很好。

【讨论】:

我得到一个错误“ImportError: DLL load failed: %1 is not an valid Win32 application.”;只有当我尝试将它安装到我的 Anaconda 包目录时。 我得到一个错误“ImportError: DLL load failed: %1 is not an valid Win32 application.”;只有当我尝试将它安装到我的 Anaconda 包目录中时。我想是因为我的 Anaconda 是 64 位的,而我安装的是 win32 版本。 As explained here 当我改用这个 64 位下载可执行文件时,它起作用了:pyodbc‑3.0.7.win‑amd64‑py3.4.exe 如果你使用 Anaconda 那么你应该使用 Conda 来安装你的包/模块。 “康达安装 pyodbc”【参考方案3】:

我通过安装pyodbc 3.0.10 解决了这个问题。最新版本的 pyodbc 在 Windows 上无法使用 Python 3.4

但是 pyodbc 3.0.10 确实对我有用

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

【讨论】:

以上是关于Windows 上的 pyodbc 和 python 3.4的主要内容,如果未能解决你的问题,请参考以下文章

centos7 pyodbc安装问题

linux上的Django-pyodbc SQL Server/freetds服务器连接问题

django-pyodbc 并调用存储过程

M1 Mac 上的 Pyodbc

在 Windows 上使用 pyodbc 连接到 Informix

如何在 Windows 上安装 pyodbc 以与 Python 3.8 一起使用?