【问题标题】:How to see if code is backwards compatible for Python?如何查看代码是否向后兼容 Python?
【发布时间】:2010-02-17 17:21:35
【问题描述】:

我有一些代码试图让它与 ESRI 的地理处理器很好地配合使用。但是,ESRI 的地理处理器在 Python 2.2、2.3、2.4、2.5 上运行。我们需要使我们的工具适用于任何版本。所以我花了很多时间为不同的版本工作和编码变通方法,这样包装器地理处理器在所有版本中都具有相同的功能。

现在重点来了,是否有某种应用程序可以基本扫描模块以查看其语法和方法是否向后兼容上述 Python 版本?

不幸的是,我无法安装 Python 2.2,因为我有 Arcgis 9.3,它需要 Python 2.5。反之亦然,我已经整理并解决了几乎所有模块依赖项。 (win32com、ctypes 等)。

但是我担心我的实际代码,我可能会花几个小时去阅读为哪个版本添加了哪些关键字等,但这基本上会是一个非常令人头疼的问题。是否有某种应用程序可以做这些事情?

【问题讨论】:

标签: python backwards-compatibility


【解决方案1】:

如果您正在积极开发商业产品,并且您 - 真的 - 想要正确支持所有这些版本,我建议:

  1. 编写一个可以运行的自动化测试套件,并为您的整个库/应用程序/任何东西测试功能。

  2. 为每个测试环境(python 2.2-2.6 和任何平台组合,如果您的产品不是仅限 win32)设置机器或理想的虚拟机。鉴于现在有几种免费的虚拟化产品(VirtualBox 和 VMWare Server,仅举两例),这在如今特别容易做到

  3. 使用 buildbot 之类的东西来自动化在所有其他平台上运行的测试,并收集结果。

不过,我可能会提到,2.2 和 2.3 之间以及 2.3 和 2.4 之间发生了重大变化。这就是为什么大多数 python 库只支持 2.3,并且现在有一些正在转向只支持 2.4 及更高版本。

每个主要版本都有一个“python 2.x 中的新功能”文档,但为 2.2 编码意味着您会错过:

  • 生成器 (2.3)(实际上,您可以通过 from __future__ import generators 在 2.2 中获取它们)
  • 生成器表达式 (2.4)
  • 子流程模块 (2.4)
  • 装饰器语法 (2.4)
  • 套(2.3)
  • 十进制(2.4,但可以向后移植)
  • 日期时间 (2.3)
  • itertools (2.3)

仅举出一小部分您可能无法拥有的很棒的东西。

你必须认真考虑你有多想支持一个 7 年前的 Python 版本,并且错过了许多可以减少代码大小(或者可能只是增加可读性)的酷特性。

【讨论】:

  • 大约平均超过 50% 的 arcgis 用户仍在使用 9.1 / 9.0。分别需要 2.3 或 2.2。如果没有他们需要的相应版本的 python,你就不能使用他们的 python 模块。我知道这很糟糕。但是 ESRI 并没有真正在乎。特别是当有 3 个不同的 API 时,9.3 有 pythonic api,9.2 并不是真正的 pythonic,而是通过枚举完成所有事情。 9.1 及更低版本使用自定义 COM 库和 win32com.client.Dispatch 的奇怪混搭。我知道这很糟糕。
  • 看来您可以从自动化测试套件和 buildbot 中获益良多。特别是如果您希望您的产品在使用 3 个不同的 API 时表现相同,那么一些经过深思熟虑的回归测试将为未来带来巨大的收益。许多项目将其构建机器人配置为在每次 VCS 提交时运行,然后在任何测试失败时通过电子邮件发送给他们。这可以更快地消除新引入的错误。
【解决方案2】:

试试 pyqver:https://github.com/ghewgill/pyqver/

为您提供分析所用关键字和模块的给定 python 脚本的最低版本。

另外,您可以在本地编译 python 2.2 并使用 virtualenv 创建带有 --python 标志的 python 2.2 环境。

【讨论】:

  • virtualenv 需要 setuptools,这需要 python 2.3.5 及更高版本。此外,快速浏览一下 virtualenv.py 本身会显示它导入到“日志记录”中,这仅在 python 2.3 开始可用。它还需要 2.4 中的“子进程”模块,该模块可以向后移植到 2.3,但即使代码本身也只承认该模块的“可能工作”。是的,python 2.2 真的是生命的尽头,甚至没有很多有用的工具支持。
  • 太棒了。我稍后会试一试。但实际上只是在看某些事情。我想我会蜷缩起来哭泣。
  • 我也无法安装较低级别的 python 版本,因为它们会阻止我使用我安装的任何 arcgis 地理处理 python 库。它必须是匹配的版本,我不能在一台机器上安装多个版本的 arcgis。所以我想我会看看虚拟拳击,看看我能做什么。呃。
猜你喜欢
  • 1970-01-01
  • 2019-06-19
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 2011-08-27
  • 2019-11-14
相关资源
最近更新 更多