通过源分析检测Python主要版本

时间:2014-09-21 08:49:17

标签: python

是否有用于检测代码库中使用的主要Python版本的工具?我需要能够检查源代码并确定用于执行该代码的Python版本。

我考虑过的一种方法是看看2to3是否暗示了任何变化。任何建议都会表明Python 2,否则我可以假设Python 3.虽然这感觉有点笨拙,所以我想知道是否有更好的方法。

2 个答案:

答案 0 :(得分:2)

一个粗略的想法:
使用py_compile编译源代码,分别使用Python2和Python3执行两次,看看是否给出了错误。

这是为了区别于语法。适合2和3的源可以简单地判断为"两者都是"。

这也是一种静态方法,不能从需要运行时的信息中推断出来,例如:

import a_python_2_specific_module

暗示代码只是Python2,但检测到这个事实似乎超出了方法的能力。

注意:

请注意,如果您实际调用不受信任的源代码(例如将其提供给解释器或eval),则强烈建议不要这样做。

答案 1 :(得分:0)

您可以在代码中使用eval进行检查:

try:
  eval("1 if True else 2")
except SyntaxError:
  #

或未来不是所有版本的未来!