爲teamcity的代碼語法檢查工具pyflakes增加支持python2和python3

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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章