Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie Pylint zur Standardisierung des Python-Codestils (von IBM)_python

So verwenden Sie Pylint zur Standardisierung des Python-Codestils (von IBM)_python

不言
不言Original
2018-04-08 11:13:342187Durchsuche

Dieser Artikel bietet eine umfassende Einführung in das Python-Codeanalysetool Pylint anhand einer ausführlichen theoretischen Einführung und leicht verständlichen Beispielen. Ich glaube, dass Leser Pylint nach der Lektüre dieses Artikels problemlos auf ihre eigenen Entwicklungsprojekte anwenden können.

Was ist Pylint?

Pylint ist ein Python-Code-Analysetool, das Python analysiert Fehler im Code, Suche nach Code, der nicht den Codierungsstilstandards entspricht (der von Pylint standardmäßig verwendete Codierungsstil ist PEP 8, spezifische Informationen finden Sie unter Ressourcen) und potenziell problematischem Code. Die neueste Version von Pylint ist derzeit pylint-0.18.1.

  • Pylint ist ein Python-Tool. Zusätzlich zu den Funktionen gewöhnlicher Code-Analysetools bietet es weitere Funktionen: wie die Überprüfung der Länge einer Codezeile, ob Variablennamen eingehalten werden Benennungsstandards, ob eine deklarierte Schnittstelle tatsächlich implementiert ist usw.

  • Ein großer Vorteil von Pylint besteht darin, dass es hochgradig konfigurierbar und anpassbar ist und es einfach ist, kleine Plug-Ins zu schreiben, um Funktionalität hinzuzufügen.

  • Wenn Sie Pylint zweimal ausführen, werden die Ergebnisse der aktuellen und der letzten Ausführung gleichzeitig angezeigt, sodass Sie sehen können, ob die Codequalität verbessert wurde.

  • Pylint ist derzeit auch im Pydev-Plugin von Eclipse integriert.

Ausführliche Einführung in Pylint

Pylint-Installation

Pylint kann für alle Python-Versionen höher oder gleich 2.2 und verwendet werden ist kompatibel. Die Pakete logilab-astng (Version >= 0.14) und logilab-common (Version >= 0.13) sind erforderlich (spezifische Informationen finden Sie unter Ressourcen). Wenn die Python-Version niedriger als 2.3 ist, ist auch das Optik-Paket erforderlich (). In diesem Artikel wird dieser Fall in den folgenden Beispielen nicht berücksichtigt.

Die Download-Adresse aller von Pylint verwendeten Pakete

Der neueste Paket-Download von logilab-astng: http://www.logilab.org/856/

Neuester Paket-Download von Logilab-common: http://www.logilab.org/848/

Optik-Paket-Download: http://optik.sourceforge.net/

Download das neueste Paket von Pylint: http://www.logilab.org/project/pylint

Pylint-Installation unter Linux

1. Installieren Sie unter Linux zuerst Python Paket (höher als Version 2.2) und fügen Sie den Pfad zur ausführbaren Python-Datei in der Umgebungsvariablen $PATH hinzu.
2. Laden Sie die Pakete von Pylint, logilab-astng (Version >= 0.14) und logilab-common (Version >= 0.13) herunter und verwenden Sie tar zxvf *.tar.gz, um diese Pakete zu dekomprimieren.
3. Geben Sie der Reihe nach die Ordner ein, in die logilab-astng, logilab-common und Pylint extrahiert wurden, und führen Sie zur Installation den Befehl Python setup.py install aus.
4. Nachdem die Installation abgeschlossen ist, können Sie Pylint über pylint [options] module_or_package aufrufen.

Pylint-Installation unter Windows

1. Installieren Sie das Python-Paket (höher als Version 2.2), klicken Sie mit der rechten Maustaste auf das Arbeitsplatzsymbol auf dem Desktop und wählen Sie Eigenschaften, Erweitert, Umgebungsvariablen hinzufügen, fügen Sie den Python-Installationspfad in $PATH hinzu, z. B. C:Python26.
2. Verwenden Sie das Dekomprimierungstool, um alle Pakete zu dekomprimieren.
3. Öffnen Sie das Befehlszeilenfenster, geben Sie mit cd nacheinander die entpackten Ordner logilab-astng, logilab-common und Pylint ein und führen Sie zur Installation den Befehl python setup.py install aus.
4. Nach Abschluss der Installation erscheint im Python-Installationspfad ein Skriptordner, der einige Bat-Skripte wie pylint.bat usw. enthält.
5. Um die Eingabe des vollständigen Pfads beim Aufruf von pylint.bat zu vermeiden, erstellen Sie eine Umleitungsdatei von pylint.bat im Python-Installationsverzeichnis. Dies ist eine Nur-Text-Datei, die pylint.bat enthält Pfad, wie zum Beispiel: C:\Python26Scriptspylint.bat.
6. Nachdem die Installation abgeschlossen ist, können Sie Pylint über pylint [options] module_or_package aufrufen.

Pylint-Aufruf

Listing 1. Pylint-Aufrufbefehl

pylint [options] module_or_package

Verwenden Sie Pylint, um den Code eines Moduls module.py zu überprüfen:

  • 1 Geben Sie den Ordner ein, in dem sich das Modul befindet, und führen Sie pylint [options] module.py
    aus Diese Aufrufmethode funktioniert immer, da das aktuelle Arbeitsverzeichnis automatisch zum Python-Pfad hinzugefügt wird.

  • 2. Ohne den Ordner einzugeben, in dem sich das Modul befindet, führen Sie pylint [options] Verzeichnis/module.py<code>pylint [options] directory/module.py<br>Diese Aufrufmethode wird verwendet, wenn Die folgenden Bedingungen sind erfüllt. Dies funktioniert, wenn: das Verzeichnis ein Python-Paket ist (z. B. eine __init__.py-Datei enthält) oder das Verzeichnis dem Python-Pfad hinzugefügt wird.

Verwenden Sie Pylint, um den Code eines Paketpakets zu überprüfen:

  • 1. Geben Sie den Ordner ein, in dem sich das Paket befindet, und führen Sie pylint [options] pakage aus .
    Diese Aufrufmethode funktioniert immer, da das aktuelle Arbeitsverzeichnis automatisch zum Python-Pfad hinzugefügt wird.

  • 2. Führen Sie pylint [options] directory/ pakage aus, ohne den Ordner einzugeben, in dem sich das Paket befindet.
    In diesem Fall kann es funktionieren, wenn die folgenden Bedingungen erfüllt sind: Das Verzeichnis wird zum Python-Pfad hinzugefügt. Unter Linux exportieren Sie beispielsweise das Verzeichnis PYTHONPATH=$PYTHONPATH:.

Darüber hinaus können Sie für Maschinen, auf denen das tkinter-Paket installiert ist, den Befehl pylint-gui verwenden, um eine einfache GUI-Schnittstelle zu öffnen. Geben Sie hier den Namen des Moduls oder Pakets ein (die Regeln sind dieselben). als Befehlszeile) und klicken Sie auf „Ausführen“. Die Ausgabe von Pylint wird in der GUI angezeigt.

Allgemeine Befehlszeilenparameter von Pylint

  • -h, --help

    Alle Hilfeinformationen anzeigen.

  • --generate-rcfile

    Sie können pylint --generate-rcfile verwenden, um eine Beispielkonfigurationsdatei zu generieren. Mithilfe der Umleitung können Sie diese Konfigurationsdatei zur späteren Verwendung speichern. Sie können auch andere Optionen voranstellen, sodass die Werte dieser Optionen in der generierten Konfigurationsdatei enthalten sind. Beispiel: pylint --persistent=n --generate-rcfile > Wenn Sie sich pylint.conf ansehen, können Sie sehen, dass persistent=no nicht mehr der Standardwert „yes“ ist.

  • --rcfile=28897b20adb25fbae118a3f80f538dec

    Geben Sie eine Konfigurationsdatei an. Fügen Sie die von Ihnen verwendete Konfiguration in die Konfigurationsdatei ein, wodurch nicht nur Ihr eigener Code standardisiert wird, sondern es auch einfacher wird, diese Spezifikationen mit anderen zu teilen.

  • -i 160d9f8cfe2207c164f6d66f6bba2720, --include-ids=160d9f8cfe2207c164f6d66f6bba2720

    Fügen Sie die Nachrichten-ID in die Ausgabe ein und übergeben Sie dann pylint --help - msg=a3edf2af01942fdcffdf035464303e4c, um die detaillierten Informationen zu diesem Fehler anzuzeigen, damit Sie den Fehler gezielt lokalisieren können.

  • -r 160d9f8cfe2207c164f6d66f6bba2720, --reports=160d9f8cfe2207c164f6d66f6bba2720

    Der Standardwert ist y, was bedeutet, dass zusätzlich zum Quellcode-Analyseteil Die Ausgabe von Pylint enthält auch einen Berichtsabschnitt.

  • --files-output=160d9f8cfe2207c164f6d66f6bba2720

    Geben Sie die Nachricht jedes Moduls/Pakets in eine Datei mit dem Namen pylint_module/package.[txt|html] aus Wenn in der Datei ein Bericht vorhanden ist, wird dieser in eine Datei mit dem Namen pylint_global.[txt|html] ausgegeben. Standardmäßig erfolgt die Ausgabe auf dem Bildschirm und nicht in einer Datei.

  • -f 0313a12b65aa20a048ec62b8cf470fd2, --output-format=0313a12b65aa20a048ec62b8cf470fd2

    Legen Sie das Ausgabeformat fest. Die auswählbaren Formate sind Text, Parseable, Colorized, MSVS (Visual Studio) und HTML. Das Standardausgabeformat ist Text.

  • --disable-msg=890637d5323cc846fd09422940793fac

    Deaktivieren Sie Nachrichten mit angegebenen IDs, wenn die Ausgabe beispielsweise die Warnmeldung W0402 enthält nicht gewünscht Es erscheint in der Ausgabe und kann mit dem Format --disable-msg= W0402 (Rohtext) angezeigt werden. Sie können -f 0313a12b65aa20a048ec62b8cf470fd2, --output-format=0313a12b65aa20a048ec62b8cf470fd2 verwenden, um andere Ausgabeformate anzugeben wie HTML usw. Die Ausgabe von Pylint besteht aus zwei Teilen: dem Quellcode-Analyseteil und dem Berichtsteil.

Teil der Quellcode-Analyse:

Für jedes Python-Modul zeigt das Pylint-Ergebnis zunächst einige „*“-Zeichen an, gefolgt vom Namen des Moduls und dann A Bei einer Reihe von Nachrichten ist das Format der Nachricht wie folgt:

MESSAGE_TYPE: LINE_NUM:[OBJECT:] MESSAGE

MESSAGE_TYPE hat die folgenden Typen:

(C) Konvention. Verstößt gegen Codierungsstilstandards

(R) Refactor. Sehr schlecht geschriebener Code.
(W) Warnung. Einige Python-spezifische Fragen.

(E) Fehler. Höchstwahrscheinlich ein Fehler im Code. (F) Schwerwiegender Fehler. Ein Fehler, der die weitere Ausführung von Pylint verhindert.

Listing 2. Ausgabe des utils-Moduls in Pylint



******************** Modul utils
C : 88 :Meldung: Fehlende Dokumentzeichenfolge
R: 88:Nachricht: Zu wenige öffentliche Methoden (0/2)

C:183:MessagesHandlerMixIn._cat_ids: Fehlende Dokumentzeichenfolge
R:183:MessagesHandlerMixIn._cat_ids: Methode könnte eine Funktion sein

R:282:MessagesHandlerMixIn.list_messages: Zu viele Zweige (14/12)


Berichtsabschnitt:


Am Ende der Quellcode-Analyse Später wird es eine Reihe von Berichten geben, wobei sich jeder Bericht auf bestimmte Aspekte des Projekts konzentriert, wie z. B. die Anzahl der Nachrichten in jeder Kategorie, Modulabhängigkeiten usw. Im Einzelnen umfasst der Bericht folgende Aspekte:

Die Anzahl der überprüften Module.

Für jedes Modul der Prozentsatz der Fehler und Warnungen. Es gibt beispielsweise zwei Module A und B. Wenn insgesamt 4 Fehler erkannt werden, 1 Fehler in A und 3 Fehler in B liegen, dann beträgt der Fehlerprozentsatz von A 25 % und der Fehlerprozentsatz von B 75 %. .

  • Gesamtzahl der Fehler, Warnungen.

  • Ein konkretes Beispiel für die Verwendung von Pylint zur Analyse von Python-Code
  • Das Folgende ist ein Teil des Python-Codes, der einige Werte aus einem liest xml-Datei und zeigt sie dw.py an. Der Code lautet wie folgt:

  • Listing 3. Quellcode

Listing 4. Identity.xml Der Inhalt von


import string 
 #!/usr/bin/env python 
 
 import xml.dom.minidom 
 
 xmlDom=xml.dom.minidom.parse("identity.xml") 
 organizations = xmlDom.getElementsByTagName(&#39;DW&#39;) 
 for org in organizations: 
  products = org.getElementsByTagName(&#39;linux&#39;) 
 for product in products: 
  print &#39;ID: &#39; + product.getAttribute(&#39;id&#39;) 
  print &#39;Name: &#39; + product.getAttribute(&#39;name&#39;) 
  print &#39;Word Count: &#39; + product.getAttribute(&#39;count&#39;)


Das Ergebnis der Verwendung von Pylint zu diesem Zeitpunkt (dies ist aus der Ausgabe im HTML-Format kopiert) lautet:


Listing 5. Ergebnisse der Pylint-Analyse
<IBM> 
  <DW> 
    <linux id="100" name="python" count="3000" /> 
  </DW> 
</IBM>

************* 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(&#39;DW&#39;) 
 for org in organizations: 
 products = org.getElementsByTagName(&#39;linux&#39;) 
 for product in products: 
  print &#39;ID: &#39; + product.getAttribute(&#39;id&#39;) 
  print &#39;Name: &#39; + product.getAttribute(&#39;name&#39;) 
  print &#39;Word Count: &#39; + product.getAttribute(&#39;count&#39;)


重新运行 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(&#39;DW&#39;) 
 for org in organizations: 
 products = org.getElementsByTagName(&#39;linux&#39;) 
 for product in products: 
  print &#39;ID: &#39; + product.getAttribute(&#39;id&#39;) 
  print &#39;Name: &#39; + product.getAttribute(&#39;name&#39;) 
  print &#39;Word Count: &#39; + product.getAttribute(&#39;count&#39;)


运行 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,可以看到报告部分的内容。

结束语

Dieser Artikel bietet eine umfassende Einführung in das Python-Codeanalysetool Pylint anhand einer ausführlichen theoretischen Einführung und leicht verständlichen Beispielen. Ich glaube, dass Leser Pylint nach der Lektüre problemlos auf ihre eigenen Entwicklungsprojekte anwenden können.

Verwandte Themen

  • Offizielle Pylint-Website.

  • Laden Sie das neueste Paket von logilab-astng herunter.

  • Laden Sie das neueste Paket von logilab-common herunter.

  • Optik-Paket herunterladen.

  • Pylints neuester Paket-Download.

  • Sehen Sie sich den Python-Codestilstandard PEP 8 an – Style Guide für den Download von Python-Code.

  • Weitere Informationen zu Python finden Sie im Python-Thema auf DeveloperWorks.

Verwandte Empfehlungen:

Python-Code-Überprüfungstool Pylint macht Ihr Python standardisierter

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Pylint zur Standardisierung des Python-Codestils (von IBM)_python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn