為teamcity的程式碼語法檢查工具pyflakes增加支援python2和python3

2023-06-04 12:00:29

TeamCity和pyflakes

TeamCity是一款由JetBrains公司開發的持續整合和部署工具,它提供了豐富的功能來幫助團隊共同作業進行軟體開發。其中包括程式碼檢查、自動化構建、測試執行、版本控制等多個方面。

在我們團隊中使用TeamCity進行配合pyflakes程式碼檢查,我們需要升級pyflakes到支援python3,同時保留python2的語法檢查功能。


在Teamcity中修改python指令碼後,無需重啟teamcity即可生效。


pyflakes語法檢查同時支援python2/3


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)