이 글에서는 자세한 이론적 소개와 이해하기 쉬운 예제를 통해 Python 코드 분석 도구인 Pylint를 포괄적으로 소개합니다. 이 글을 읽고 나면 독자들이 Pylint를 자신의 개발 프로젝트에 쉽게 적용할 수 있을 것이라고 믿습니다. Pylint란? Pylint는 Python 코드의 오류를 분석하고 코드 스타일 표준에 맞지 않는 오류를 찾아내는 도구입니다. Pylint에서 사용하는 기본 코딩 스타일은 PEP 8(자세한 내용은 참고자료 참조)이며 잠재적으로 문제가 있는 코드입니다. 현재 Pylint의 최신 버전은 pylint-0.18.1입니다.
Pylint는 일반적인 코드 분석 도구의 기능 외에도 코드 줄 길이 확인, 변수 이름이 명명 표준을 준수하는지 여부 등 더 많은 기능을 제공합니다. 선언된 인터페이스가 실제로 사용됩니다.
Pylint는 2.2 이상의 모든 Python 버전에서 사용할 수 있습니다. logilab-astng(버전 >= 0.14) 및 logilab-common(버전 >= 0.13) 패키지가 필요합니다(자세한 정보는 참고자료 참조). Python 버전이 2.3보다 낮으면 optik 패키지도 필요합니다( 이 기사 다음 예에서는 이 경우를 고려하지 않습니다.)
Pylint에서 사용하는 모든 패키지 다운로드 주소logilab-astng 최신 패키지 다운로드: http://www.logilab.org/856/
logilab-common 최신 패키지 다운로드: http://www.logilab. org/848/optik 패키지 다운로드: http://optik.sourceforge.net/
Pylint 최신 패키지 다운로드: http://www.logilab.org/project/pylint
Linux에 Pylint 설치1. Linux에서는 먼저 Python 패키지(버전 2.2 이상)를 설치하고 환경 변수 $PATH에 Python 실행 파일 경로를 추가합니다.
2. Pylint, logilab-astng(버전 >= 0.14) 및 logilab-common(버전 >= 0.13) 패키지를 다운로드하고 tar zxvf *.tar.gz를 사용하여 이러한 패키지의 압축을 풉니다.3.logilab-astng, logilab-common, Pylint가 순서대로 추출된 폴더를 입력하고 Python setup.py install 명령을 실행하여 설치합니다. 4. 설치가 완료되면 pylint [옵션] module_or_package를 통해 Pylint를 호출할 수 있습니다.
Windows에서 Pylint 설치
1. Python 패키지(2.2 버전 이상)를 설치하고 바탕화면의 내 컴퓨터 아이콘을 마우스 오른쪽 버튼으로 클릭한 후 속성, 고급, 환경 변수를 선택하고 Python을 $PATH에 추가합니다. , 예: C:Python26.
3. 명령줄 창을 열고, cd를 사용하여 압축을 푼 logilab-astng, logilab-common, Pylint 폴더를 차례로 입력하고 python setup.py install 명령을 실행하여 설치합니다. 4. 설치가 완료되면 Python 설치 경로에 pylint.bat 등과 같은 일부 bat 스크립트가 포함된 Scripts 폴더가 나타납니다. 5. pylint.bat를 호출할 때 전체 경로를 입력하지 않으려면 Python 설치 디렉터리에 pylint.bat의 리디렉션 파일을 만듭니다. 이는 pylint.bat의 실제 경로가 포함된 일반 텍스트 파일입니다. . 예: C:\Python26Scriptspylint.bat.
6. 설치가 완료된 후 pylint [옵션] module_or_package를 통해 Pylint를 호출할 수 있습니다.
Pylint 호출
List 1. Pylint 호출 명령
pylint [options] module_or_package
Pylint를 사용하여 모듈 코드 확인 module.py:
1. 모듈 폴더에서 pylint [options] module.py
를 실행하세요.
현재 작업 디렉터리가 Python 경로에 자동으로 추가되기 때문에 이 호출 방법은 항상 작동합니다.
pylint [options]directory/module.py<p></p>
를 실행합니다. 이 호출 방법은 다음 조건이 충족될 때 작동할 수 있습니다. 디렉토리는 Python입니다. 패키지(예: __init__.py 파일 포함) 또는 디렉터리가 Python 경로에 추가됩니다. pylint [options] module.py
2. 不进入模块所在的文件夹,运行 pylint [options] directory/module.py<br>
这种调用方式当如下条件满足的时候是可以工作的:directory 是个 Python 包 ( 比如包含一个 __init__.py 文件 ),或者 directory 被加入了 Python 的路径中。
使用 Pylint 对一个包 pakage 进行代码检查:
1. 进入这个包所在文件夹,运行 pylint [options] pakage
。
这种调用方式是一直可以工作的,因为当前的工作目录会被自动加入 Python 的路径中。
2. 不进入包所在的文件夹,运行 pylint [options] directory/ pakage
pylint [options] pakage
를 실행하세요. 🎜
현재 작업 디렉터리가 자동으로 Python 경로에 추가되기 때문에 이 호출 방법은 항상 작동합니다. 🎜🎜🎜🎜2. 패키지가 있는 폴더를 입력하지 않고 pylint [options]directory/pakage
를 실행합니다. 🎜
이 경우 다음 조건이 충족되면 작동할 수 있습니다. 디렉터리가 Python 경로에 추가됩니다. 예를 들어 Linux에서는 PYTHONPATH=$PYTHONPATH: 디렉터리를 내보냅니다. 🎜또한 tkinter 패키지가 설치된 시스템의 경우 pylint-gui 명령을 사용하여 간단한 GUI 인터페이스를 열고 여기에 모듈 또는 패키지 이름을 입력할 수 있습니다(규칙은 명령줄과 동일합니다). Run을 클릭하면 Pylint의 출력이 GUI에 표시됩니다.
Pylint의 공통 명령줄 매개변수
-h, --help
모든 도움말 정보를 표시합니다.
--generate-rcfile
pylint --generate-rcfile을 사용하여 예제 구성 파일을 생성할 수 있습니다. 나중에 사용하기 위해 리디렉션을 사용하여 이 구성 파일을 저장할 수 있습니다. 생성된 구성 파일에 해당 옵션의 값이 포함되도록 앞에 다른 옵션을 추가할 수도 있습니다. 예: pylint --percious=n --generate-rcfile > pylint.conf를 보면 persist=no가 더 이상 기본값인 yes가 아님을 알 수 있습니다.
--rcfile=28897b20adb25fbae118a3f80f538dec
구성 파일을 지정하세요. 사용하는 구성을 구성 파일에 넣으세요. 이렇게 하면 자신의 코드를 표준화할 뿐만 아니라 이러한 사양을 다른 사람과 쉽게 공유할 수도 있습니다.
-i 160d9f8cfe2207c164f6d66f6bba2720, --include-ids=160d9f8cfe2207c164f6d66f6bba2720
출력에 메시지 ID를 포함시킨 다음 pylint --help-msg=a3edf2af01942fdcffdf035464303e4c를 사용하여 확인하세요. 오류를 구체적으로 찾을 수 있도록 오류 세부 정보를 제공합니다.
-r 160d9f8cfe2207c164f6d66f6bba2720, --reports=160d9f8cfe2207c164f6d66f6bba2720
기본값은 y입니다. 이는 Pylint의 출력에 소스 코드 분석 부분뿐만 아니라 보고서 부분도 포함된다는 의미입니다.
--files-output=160d9f8cfe2207c164f6d66f6bba2720
각 모듈/패키지의 메시지를 pylint_module/package.[txt|html]이라는 파일에 출력합니다. 보고서가 있는 경우 해당 파일에 출력합니다. pylint_global.[txt|html] 파일에 있습니다. 기본값은 파일이 아닌 화면으로 출력하는 것입니다.
-f 0313a12b65aa20a048ec62b8cf470fd2, --output-format=0313a12b65aa20a048ec62b8cf470fd2
출력 형식을 설정합니다. 선택할 수 있는 형식은 텍스트, 구문 분석 가능, 색상화, msvs(visual studio) 및 html입니다. 기본 출력 형식은 텍스트입니다.
--disable-msg=890637d5323cc846fd09422940793fac
지정된 ID가 있는 메시지를 금지합니다. 예를 들어 출력에 경고 메시지 W0402가 포함되어 있는 경우 이를 출력에 표시하지 않으려면 다음을 사용할 수 있습니다. --disable- msg= W0402
Pylint의 출력
Pylint의 기본 출력 형식은 -f 0313a12b65aa20a048ec62b8cf470fd2, --output-format=0313a12b65aa20a048ec62b8cf470fd2으로 지정할 수 있는 원시 텍스트 형식입니다. 형식은 html 등입니다. Pylint의 출력에는 소스 코드 분석 부분과 보고서 부분이라는 두 부분이 있습니다.
소스 코드 분석 부분:
각 Python 모듈에 대해 Pylint 결과는 먼저 일부 "*" 문자를 표시한 다음 모듈 이름을 표시하고 일련의 메시지를 표시합니다. 메시지 형식은 다음과 같습니다.
MESSAGE_TYPE: LINE_NUM:[OBJECT:] MESSAGE
MESSAGE_TYPE에는 다음과 같은 유형이 있습니다.
(C) 규칙. 코딩 스타일 표준
(R) 리팩토링을 위반합니다. 매우 잘못 작성된 코드입니다.
(W) 경고. 몇 가지 Python 관련 질문입니다.
(E) 오류. 코드의 버그일 가능성이 높습니다.
(F) 치명적인 오류. Pylint가 더 이상 실행되지 못하게 하는 오류입니다.
목록 2. Pylint
**************** 모듈 utils에서 utils 모듈의 출력 결과
C: 88:Message: Missing docstring
R: 88:Message : 공개 메소드가 너무 적음(0/2)
C:183:MessagesHandlerMixIn._cat_ids: 문서 문자열 누락
R:183:MessagesHandlerMixIn._cat_ids: 메소드가 함수일 수 있음
R:282:MessagesHandlerMixIn.list_messages: 분기가 너무 많음(14/ 12)
보고서 섹션:
소스 코드 분석이 완료된 후 일련의 보고서가 생성됩니다. 각 보고서는 각 카테고리의 메시지 수, 모듈 종속성과 같은 프로젝트의 특정 측면에 중점을 둡니다. , 등. 특히 보고서에는 다음과 같은 측면이 포함됩니다.
확인된 모듈 수.
각 모듈에 대한 오류 및 경고의 비율입니다. 예를 들어 두 개의 모듈 A와 B가 있습니다. 총 4개의 오류가 감지되면 A에 1개의 오류가 있고 B에 3개의 오류가 있는 경우 A의 오류 비율은 25%이고 B의 오류 비율은 75%입니다. .
총 오류, 경고 수입니다.
Pylint를 사용하여 Python 코드를 분석하는 구체적인 예
다음은 xml 파일에서 일부 값을 읽어서 표시하는 Python 코드 dw.py입니다.
Listing 3. 소스 코드
import string #!/usr/bin/env python import xml.dom.minidom xmlDom=xml.dom.minidom.parse("identity.xml") organizations = xmlDom.getElementsByTagName('DW') for org in organizations: products = org.getElementsByTagName('linux') for product in products: print 'ID: ' + product.getAttribute('id') print 'Name: ' + product.getAttribute('name') print 'Word Count: ' + product.getAttribute('count')
Listing 4. Identity.xml의 내용
<IBM> <DW> <linux id="100" name="python" count="3000" /> </DW> </IBM>
이때 Pylint를 사용한 결과(html 형식의 출력에서 복사한 내용입니다)는 다음과 같습니다. :
목록 5. Pylint 분석 결과
************* Module dw
C:1:Missing docstring
C:5:Operator not preceded by a space xmlDom=xml.dom.minidom.parse("identity.xml") ^
C:5:Invalid name "xmlDom" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C:6:Invalid name "organizations" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
Report 部分省略
输出中第一部分是源代码分析,第二部分是报告。输出结果中有这么多信息,从哪里开始分析呢?首先使用如下的步骤来分析代码:
1. 因为输出结果太长,所以可以先不让它输出报告部分,先根据源代码分析部分来找出代码中的问题。使用选项 "--reports=n"。
2. 使用选项 "--include-ids=y"。可以获取到源代码分析部分每条信息的 ID。
清单 6. 使用 pylint --reports=n --include-ids=y dw.py 的结果
************* Module dw
C0111: 1: Missing docstring
C0322: 5: Operator not preceded by a space xmlDom=xml.dom.minidom.parse("identity.xml") ^
C0103: 5: Invalid name "xmlDom" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C0103: 6: Invalid name "organizations" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
每个信息前面都会加上一个 id, 如果不理解这个信息的意思,可以通过 pylint --help-msg=id来查看。
清单 7. 使用 pylint --help-msg= C0111 的结果
C0111: *Missing docstring*
Used when a module, function, class or method has no docstring. Some special
methods like __init__ doesn't necessary require a docstring.
This message belongs to the basic checker.
3. 开始分析每个源代码中的问题。从上面知道,第一个问题的原因是缺少 docstring,在代码中增加 docstring, 修改后的代码如下:
清单 8. 增加 docstring 修改后的源码
#!/usr/bin/env python """This script parse the content of a xml file""" import xml.dom.minidom xmlDom=xml.dom.minidom.parse("identity.xml") organizations = xmlDom.getElementsByTagName('DW') for org in organizations: products = org.getElementsByTagName('linux') for product in products: print 'ID: ' + product.getAttribute('id') print 'Name: ' + product.getAttribute('name') print 'Word Count: ' + product.getAttribute('count')
重新运行 pylint --reports=n --include-ids=y dw.py,结果为:
清单 9. 运行结果
************* Module dw
C0322: 7: Operator not preceded by a space
xmlDom=xml.dom.minidom.parse("identity.xml")
^
C0103: 7: Invalid name "xmlDom" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C0103: 8: Invalid name "organizations" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
可以看到源代码中的第一个问题已被解决。
4. 关于第二个 C0322 的问题,这里的分析结果说明得比较清楚,是代码第七行中的等号运算符两边没有空格。我们在这里加上空格,重新运行 pylint --reports=n --include-ids=y dw.py,结果为:
清单 10. 运行结果
************* Module dw
C0103: 7: Invalid name "xmlDom" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C0103: 8: Invalid name "organizations" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
5. 可以看到现在问题只剩下 C0103 了。这里的意思是变量命名规则应该符合后面正则表达式的规定。Pylint 定义了一系列针对变量,函数,类等的名字的命名规则。实际中我们不一定要使用这样的命名规则,我们可以定义使用正则表达式定义自己的命名规则,比如使用选项 --const-rgx='[a-z_][a-z0-9_]{2,30}$',我们将变量 xmlDom改为 xmldom, 代码如下:
清单 11. 将变量 xmlDom 改为 xmldom 后的源码
#!/usr/bin/env python """This script parse the content of a xml file""" import xml.dom.minidom xmldom = xml.dom.minidom.parse("identity.xml") organizations = xmldom.getElementsByTagName('DW') for org in organizations: products = org.getElementsByTagName('linux') for product in products: print 'ID: ' + product.getAttribute('id') print 'Name: ' + product.getAttribute('name') print 'Word Count: ' + product.getAttribute('count')
运行 pylint --reports=n --include-ids=y --const-rgx='[a-z_][a-z0-9_]{2,30}$' dw.py,结果中就没有任何问题了。
6. 如果希望一个组里的人都使用这些统一的规则,来规范一个部门的代码风格。比如说大家都使用 --const-rgx='[a-z_][a-z0-9_]{2,30}$'作为命名规则,那么一个比较便捷的方法是使用配置文件。
使用 pylint --generate-rcfile > pylint.conf来生成一个示例配置文件,然后编辑其中的 --const-rgx选项。或者也可以直接 pylint --const-rgx='[a-z_][a-z0-9_]{2,30}$' --generate-rcfile > pylint.conf,这样生成的配置文件中 --const-rgx选项直接就是 '[a-z_][a-z0-9_]{2,30}$'了。
以后运行 Pylint 的时候指定配置文件:pylint --rcfile=pylint.conf dw.py
这样 Pylint 就会按照配置文件 pylint.conf中的选项来指定参数。在一个部门中,大家可以共同使用同一个配置文件,这样就可以保持一致的代码风格。
7. 如果把 report 部分加上,即不使用 --reports=n,可以看到报告部分的内容。
结束语
이 글에서는 자세한 이론적 소개와 이해하기 쉬운 예제를 통해 Python 코드 분석 도구인 Pylint를 포괄적으로 소개합니다. 이 글을 읽고 나면 독자들이 자신의 개발 프로젝트에 Pylint를 쉽게 적용할 수 있을 것이라 믿습니다.
관련 주제
Pylint 공식 웹사이트.
logilab-astng의 최신 패키지 다운로드입니다.
logilab-common의 최신 패키지 다운로드입니다.
optik 패키지 다운로드.
Pylint의 최신 패키지 다운로드.
Python 코드 스타일 표준 PEP 8 -- Python 코드용 스타일 가이드 다운로드를 확인하세요.
Python에 대한 자세한 내용은 개발자Works의 Python 주제를 참조하세요.
관련 권장사항:
파이썬 코드 검사 도구인 pylint를 사용하면 Python을 더욱 표준화할 수 있습니다.
위 내용은 Pylint를 사용하여 Python 코드 스타일을 표준화하는 방법(IBM 제공)_python의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!