用于确定所需的最低版本Python的工具?

时间:2009-04-29 22:21:12

标签: python code-analysis

是否有类似于Pylint的东西,它会查看Python脚本(或运行它),并确定每行(或函数)需要哪个版本的Python?

例如,理论用法:

$ magic_tool <EOF
with something:
    pass
EOF
1: 'with' statement requires Python 2.6 or greater

$ magic_tool <EOF
class Something:
    @classmethod
    def blah(cls):
        pass
EOF
2: classmethod requires Python 2.2 or greater
$ magic_tool <EOF
print """Test
"""
EOF
1: Triple-quote requires Python 1.5 of later

这样的事情可能吗?我想最简单的方法是在光盘上安装所有Python版本,运行每个版本的脚本并查看发生的错误..

3 个答案:

答案 0 :(得分:42)

受到这个优秀问题的启发,我最近整理了一个尝试这样做的脚本。你可以在pyqver的github上找到它。

它已经相当完整,但有些方面尚未处理(如README文件中所述)。随意分叉并改进它!

答案 1 :(得分:8)

不是一个真正有用的答案,但无论如何它都在这里。 我认为这应该是可行的(尽管可能是一个练习),例如,您可以确保您拥有要检查的版本的所有官方语法,例如this one

然后解析从第一个语法版本开始的代码。 接下来,您需要一个类似的所有内置模块命名空间的映射,并从最早的版本开始再次解析代码,尽管区分内置模块和外部模块或者像ElementTree之间的某些模块可能很棘手。 / p>

结果应该是对支持代码语法的版本的概述,以及模块的概述以及使用它需要哪个版本(如果有的话)。通过该结果,您可以计算最佳最低版本和最高版本。

答案 2 :(得分:1)

Greg Hewgill的pyqver工具已经有一段时间没有更新了。

vermin是类似的实用程序,它以详细模式( chooseImage() actionSheet = this.actionSheetCtrl.create({ title: 'Select Image Source', buttons: [ { text: 'Load from Gallery', handler: () => { let options = { sourceType: 2, encodingType: 0, destinationType: 0, allowEdit: true, quality: 95, targetWidth: 800, targetHeight: 600, correctOrientation: true }; this.camera.getPicture(options).then(uri => { this.image_url = 'data:image/jpeg;base64,' + uri; }).catch(e => console.log(e)); } }, { text: 'Use Camera', handler: () => { let options = { sourceType: 1, encodingType: 0, destinationType: 0, allowEdit: true, quality: 95, targetWidth: 800, targetHeight: 600, correctOrientation: true }; this.camera.getPicture(options).then(uri => { this.image_url = 'data:image/jpeg;base64,' + uri; }).catch(e => console.log(e)); } }, { text: 'Cancel', role: 'cancel' } ] }); actionSheet.present(); } <button round ion-button full color="picture" style="margin:auto;padding:10px; display:block;" (click)="chooseImage()"> Select a Photo </button> )显示决策中考虑的行。

-vvv

奖金:使用参数% pip install vermin % vermin -vvv somescript.py Detecting python files.. Analyzing using 8 processes.. !2, 3.6 /path/to/somescript.py L13: f-strings require 3.6+ L14: f-strings require 3.6+ L15: f-strings require 3.6+ L16: f-strings require 3.6+ print(expr) requires 2+ or 3+ Minimum required versions: 3.6 Incompatible versions: 2 ,您可以定义要与之兼容的目标版本-t=V。如果不满足此版本要求,该脚本将以退出代码V退出,从而易于集成到测试套件中。