是否有类似于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版本,运行每个版本的脚本并查看发生的错误..
答案 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
退出,从而易于集成到测试套件中。