0

为teamcity的代码语法检查工具pyflakes增加支持python2和python3 - 赵青青

 11 months ago
source link: https://www.cnblogs.com/zhaoqingqing/p/17455281.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文为作者原创,转载请注明出处:https://www.cnblogs.com/zhaoqingqing/p/17455281.html


TeamCity和pyflakes#

TeamCity是一款由JetBrains公司开发的持续集成和部署工具,它提供了丰富的功能来帮助团队协作进行软件开发。其中包括代码检查、自动化构建、测试运行、版本控制等多个方面。

在我们团队中使用TeamCity进行配合pyflakes代码检查,我们需要升级pyflakes到支持python3,同时保留python2的语法检查功能。

在Teamcity中修改python脚本后,无需重启teamcity即可生效。

pyflakes语法检查同时支持python2/3#

image-20230603154818505

pyflakes#

pyflakes · PyPI

查看版本:指令:pip list,pyflakes 2.3.1

teamcity代码:https://svn-xxx/tools/teamcity/check_pyflakes.py

从官网查到最后一个同时支持python2和3的pyflakes版本:https://pypi.org/project/pyflakes/2.4.0/,实测下来它要分别为py2和py3安装,而不是只安装一个来同时适配2和3。

关于pyflakes的使用和配置:python代码检查工具(静态代码审查)

python3的pyflakes支持python2吗?#

结论:不支持

语法有差别,比如print

PS D:\work\tools> python -u "d:\xxx\test_teamcity.py"
[zhao]docheck py ast, is_py3:1 ,filePath:D:/debug/qing_debug.py
origin msg:  D:/xxx/qing_debug.py:54:9: invalid syntax
        print "[zhao]aaaaa"
              ^

再举个例子

PS D:\work\tools> python -u "d:\xxx\test_teamcity.py"
[zhao]docheck py ast, is_py3:1 ,filePath:D:/debug/qing_debug.py
origin msg:  D:/debug/qing_debug.py:32:7: invalid syntax
        exec 'print 111'
             ^

再来个例子

PS E:\Code\python_study\collection> py -3 -m pyflakes range_test.py
range_test.py:9:1: 'random' imported but unused
range_test.py:14:10: undefined name 'xrange'

官方的建议#

官方建议我们为python2/3分别安装pyflakes。

You can also invoke Pyflakes with python3 -m pyflakes . or python2 -m pyflakes . if you have it installed for both versions.

如何区分是python3还是python2?#

按工程人工标记,因为同一个工程中python2和3不能混用,所以在写代码的时候程序员就已经知道当前工程应该用python2解释器还是python3解释器。

因为一个py脚本是要放到python2还是python3的解释器来执行是由程序员来决定的。

一台电脑同时安装python2和3#

我们在安装Python3(>=3.3)时,Python的安装包实际上在系统中安装了一个启动器py.exe,默认放置在文件夹C:\Windows\下面。这个启动器允许我们指定使用Python2还是Python3来运行代码(当然前提是你已经成功安装了Python2和Python3)。

在安装python3时不要勾选添加安装目录到环境变量中,下面这几个都不要添加到环境变量的path中

  1. C:\Python38

  2. C:\Python38\Scripts

同时不要把这几个目录添加到环境变量的path中

  1. C:\Users\zhaoqingqing01\AppData\Local\Programs\Python\Python38\

  2. C:\Users\zhaoqingqing01\AppData\Local\Programs\Python\Python38\Scripts\

使用pip安装库#

我们在安装python3的时候没有把py3添加到环境变量中,所以当我们使用pip时默认是指向python2。

如果你不放心,还可以这样:py -2 -m pip install XXXX

为Python3安装软件:py -3 -m pip install XXXX

更多原理性的知识,欢迎查阅我的KM文章:zhaoqingqing的网易km个人空间 (netease.com)

为python3安装 pyflakes#

py -3 -m pip install pyflakes

C:\Users\zhaoqingqing01>py -3 -m pip install pyflakes
Collecting pyflakes
  Downloading pyflakes-3.0.1-py2.py3-none-any.whl (62 kB)
     |████████████████████████████████| 62 kB 4.8 MB/s
Installing collected packages: pyflakes
  WARNING: The script pyflakes.exe is installed in 'C:\Python38\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pyflakes-3.0.1

pyflakes检查python语法#

pyflakes console.py >logPyflakes.txt 2>&1

py -3 -m pyflakes console.py >logPyflakes.txt 2>&1

PS D:\work\tools\start_docker\scripts> pyflakes console.py
console.py:20:10: invalid syntax
        async def connect(self, command):
                ^
PS D:\work\tools\start_docker\scripts> py -3 -m pyflakes console.py
PS D:\work\tools\start_docker\scripts>

集成到teamcity#

旧版只支持到python2#

PS D:\work\tools> python -u "d:\xxx\test_teamcity.py"
[zhao]docheck py ast , is_py3:0 ,filePath:D:/xxx/console.py
origin msg D:/xxx/console.py:20:10: invalid syntax
        async def connect(self, command):
                ^

开启python3支持#

PS D:\work\tools> python -u "d:\xxx\test_teamcity.py"
[zhao]docheck py ast , is_py3:1 ,filePath:D:/xxx/console.py
origin msg 

参数是啥意思#

python 执行保存log 1>>log.txt 2>&1_python 2>log.txt_做测试的喵酱的博客-CSDN博客

Python—后台运行(nohup 、&、 2>&1详解) - 刘_love_田 - 博客园 (cnblogs.com)

作者:赵青青   一名在【网易游戏】做游戏开发的程序员,擅长Unity3D,游戏开发,.NET等领域。
本文版权归作者和博客园共有,欢迎转载,转载之后请务必在文章明显位置标出原文链接和作者,谢谢。
如果本文对您有帮助,请点击【推荐】您的赞赏将鼓励我继续创作!想跟我一起进步么?那就【关注】我吧。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK