【问题标题】:Is there a way to know which versions of python are supported by my code?有没有办法知道我的代码支持哪些版本的 python?
【发布时间】:2010-11-10 05:34:29
【问题描述】:

您可能知道 Windows 合规性工具,它可以帮助人们了解他们的代码是否受任何版本的 MS 操作系统支持。

我正在为 Python 寻找类似的东西。

我正在使用 Python 2.6 编写一个库,但由于使用了 with 关键字,我意识到它与 Python 2.5 不兼容。

我想知道将来是否有一种简单而自动的方法可以避免这种情况。

我也有兴趣了解支持哪些操作系统。

感谢您的帮助

【问题讨论】:

  • 你正在写它。 简单的方法就是知道你在做什么。

标签: python dependencies versioning


【解决方案1】:

为了回复a previous question about this,我写了pyqver。如果您有任何改进,请随时 fork 和贡献!

【讨论】:

  • pyqver 似乎是我正在寻找的工具。非常感谢。但是,我注意到我的脚本被视为与 2.5 兼容,但事实并非如此。 from future import with_statement 丢失。 “except as”也未被检测为与 2.5 的兼容性问题。我可以想象处理所有情况都很复杂。 pyqver 是一个很棒的工具,如果可以的话,我会努力做出贡献并改进它
  • “except as”在文档中被标记为一个错误。我会看看我是否可以找出 with 语句发生了什么。
  • 当您注意到“with”语句的问题时,您使用哪个版本的 Python 来运行 pyqver?使用 2.6 运行时,它按预期工作,但使用 2.5 时,标准库“编译器”模块无法识别“with”关键字。我建议使用 2.6 或更高版本运行 pyqver。
  • 我用 python 2.6 运行 pyqver。它检测到我的代码对 python 2.5 有效。事实上,我的代码对该版本有效,但缺少“从未来导入 with_statement”。
  • 这种方法可能对需要在较旧的 Python 上可用的脚本/模块/包的分类有用,但不能替代实际测试;静态分析无法发现许多问题(例如 a in b 其中 b 是一个字典)。关于工具本身的注意事项:(1)doctest 由于虚假原因而失败(实际输出不是预期的简单 (2, 5) 格式)(2)处理例如from decimal import Decimal 在待办事项中
【解决方案2】:

我建议您宁愿使用自动化测试而不是代码分析工具。

请注意,您的代码可能依赖也可能不依赖 Python 标准库中的细微行为变化。比如httplib:上传文件的时候,把数据给个str是正常的。在 Python 2.6 中,如果您正确轻推它们,可以提供流对象(对于 >1GB 文件很有用),但在 Python 2.5 中,您会收到错误。

一套全面的单元测试和集成测试将更加可靠,因为它们会测试您的程序在 Python 版本 X.Y 上是否真正工作

$ python2.6 tests/run_all.py
.................................
33 tests passed
[OK]

您与 Python 2.6 兼容。

$ python2.4 tests/run_all.py
...........EEE.........EEE.......
27 tests passed, 6 errors
[FAIL]

兼容 Python 2.4。

【讨论】:

  • +1 这也是个好主意。静态分析工具无法检测到相当多的微妙事物。如果您的单元测试覆盖率很高,这是一个很好的方法。
  • 感谢这个非常有价值的评论。但是,我不认为代码分析工具是单元测试的竞争对手。它有不同的用途,应该一起使用。分析工具可以比单元测试更快地检测潜在问题,因为它专注于兼容性问题。我很高兴现在在我的工具箱中获得了一个代码分析工具,但当然我会继续为所有受支持的版本运行测试
【解决方案3】:

Python 2.5 仍然可以保存,因为它可以使用 with 关键字:

from __future__ import with_statement

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2011-08-05
    • 2013-07-11
    • 2018-12-25
    • 2023-03-10
    • 2013-07-28
    • 2017-05-10
    相关资源
    最近更新 更多