如何查看代码是否向后兼容Python?

时间:2010-02-17 17:21:36

标签: python backwards-compatibility

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

现在这里有一件大事,是否有某种应用程序基本上可以扫描模块,看它的语法和方法是否与上述Python版本向后兼容?

不幸的是,我无法安装Python 2.2,因为我有Arcgis 9.3,它需要Python 2.5。反之亦然,我已经完成了所有模块依赖关系的排序和计算。 (win32com,ctypes等)。

但我担心我的实际代码,我可以花上几个小时去阅读为什么版本等添加关键字,但这基本上将是一个巨大的麻烦。是否有某种应用程序可以执行这些操作?

2 个答案:

答案 0 :(得分:11)

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

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

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

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

  4. 我可能会提到,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,但可以向后移植)
    • datetime(2.3)
    • itertools(2.3)

    只是举出一小部分你可能不会拥有的令人敬畏的东西。

    你必须真正考虑你想要支持一个7岁的python版本有多么糟糕,并错过了许多可以减少你的代码大小(或者可能只是提高可读性)的很酷的功能。

答案 1 :(得分:10)

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

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

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