ホームページ  >  記事  >  バックエンド開発  >  Pylint を使用して Python コード スタイルを標準化する方法 (IBM より)_python

Pylint を使用して Python コード スタイルを標準化する方法 (IBM より)_python

不言
不言オリジナル
2018-04-08 11:13:342248ブラウズ

この記事では、詳細な理論的紹介とわかりやすい例を通じて、Python コード分析ツール Pylint について包括的に紹介します。これを読めば、読者は自分の開発プロジェクトに Pylint を簡単に適用できるようになると思います。 Pylint とは? Pylint は Python コードのエラーを分析し、コード スタイルの標準を満たしていないエラーを検出します。 Pylint で使用されるデフォルトのコーディング スタイルは PEP 8 (詳細については「参考文献」を参照) であり、問​​題が発生する可能性のあるコードです。現在の Pylint の最新バージョンは pylint-0.18.1 です。

Pylint は、通常のコード分析ツールの機能に加えて、コード行の長さのチェック、変数名が命名標準に準拠しているかどうかのチェックなど、より多くの機能を提供します。宣言されたインターフェイスが実際に使用されるなど。

    Pylint の大きな利点は、高度に構成可能で、高度にカスタマイズ可能であり、機能を追加するための小さなプラグインを簡単に作成できることです。
  • Pylint を 2 回実行すると、現在と前回の実行結果が同時に表示されるため、コードの品質が向上したかどうかを確認できます。
  • Pylint は現在、Eclipse の pydev プラグインにも統合されています。
  • Pylintの詳細な紹介

  • 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 [options] module_or_package を通じて Pylint を呼び出すことができます。

Windows への Pylint のインストール


1. Python パッケージ (バージョン 2.2 以降) をインストールし、デスクトップの [マイ コンピューター] アイコンを右クリックし、[プロパティ]、[詳細設定]、[環境変数] を選択し、Python を $PATH に追加します。 、C:Python26 など。

2. 解凍ツールを使用してすべてのパッケージを解凍します。

3. コマンド ライン ウィンドウを開き、cd を使用して logilab-astng、logilab-common、Pylint の解凍されたフォルダーに順番に入力し、コマンド python setup.py install を実行してインストールします。 4. インストールが完了すると、Python インストール パスに Scripts フォルダーが表示されます。このフォルダーには、pylint.bat などのいくつかの Bat スクリプトが含まれています。 5. pylint.bat を呼び出すときにフルパスを入力しないようにするには、pylint.bat のリダイレクト ファイルを Python インストール ディレクトリに作成します。これは、pylint.bat の実際のパスを含むプレーン テキスト ファイルです。 . 、C:\Python26Scriptspylint.bat など。

6. インストールが完了したら、pylint [options] module_or_package を通じて Pylint を呼び出すことができます。



Pylint呼び出し


リスト1. Pylint呼び出しコマンド

pylint [options] module_or_package


Pylintを使用してモジュール module.py のコードを確認します:

1.モジュールフォルダー、実行

現在の作業ディレクトリが Python パスに自動的に追加されるため、この呼び出し方法は常に機能します。

  • 2. モジュールが配置されているフォルダーを入力せずに、pylint [options] directory/module.py<code>pylint [options] module.py を実行します。この呼び出しメソッドは、次の条件が満たされる場合に機能します: ディレクトリが Pythonパッケージ (たとえば、__init__.py ファイルを含む) またはディレクトリが Python パスに追加されます。

  • Pylint を使用してパッケージパッケージのコードを確認します:

    pylint [options] directory/module.py<br>这种调用方式当如下条件满足的时候是可以工作的:directory 是个 Python 包 ( 比如包含一个 __init__.py 文件 ),或者 directory 被加入了 Python 的路径中。

使用 Pylint 对一个包 pakage 进行代码检查:

  • 1. 进入这个包所在文件夹,运行 pylint [options] pakage

    1. パッケージが存在するフォルダーに入り、pylint [options] pakage を実行します。
  • 現在の作業ディレクトリが Python パスに自動的に追加されるため、この呼び出し方法は常に機能します。
  • pylint [options] directory/ pakage
    2. パッケージが存在するフォルダーに入らずに

    を実行します。 🎜 この場合、次の条件が満たされる場合に機能します: ディレクトリが Python パスに追加されます。たとえば、Linux では、PYTHONPATH=$PYTHONPATH: ディレクトリをエクスポートします。 🎜

さらに、tkinter パッケージがインストールされているマシンの場合、コマンド pylint-gui を使用して単純な GUI インターフェイスを開き、ここにモジュールまたはパッケージの名前を入力します (規則はコマンド ラインと同じです)。 「実行」をクリックすると、Pylint の出力が GUI に表示されます。

Pylint の共通コマンドラインパラメータ

  • -h、--help

    はすべてのヘルプ情報を表示します。

  • --generate-rcfile

    pylint --generate-rcfile を使用してサンプル構成ファイルを生成できます。リダイレクトを使用して、後で使用できるようにこの構成ファイルを保存できます。他のオプションを前に追加して、これらのオプションの値が生成された構成ファイルに含まれるようにすることもできます。例: pylint --persistent=n --generate-rcfile > pylint.conf を見ると、persistent=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 (ビジュアル スタジオ)、および html です。デフォルトの出力形式はテキストです。

  • --disable-msg=890637d5323cc846fd09422940793fac

    たとえば、出力に警告メッセージ W0402 が含まれている場合、出力に表示したくない場合は、次のように指定できます。 --disable- msg= W0402

Pylint の出力

Pylint のデフォルトの出力形式は、-f 0313a12b65aa20a048ec62b8cf470fd2、--output-format=0313a12b65aa20a048ec62b8cf470fd2 で指定できます。形式はhtmlなどです。 Pylint の出力には、ソース コード分析部分とレポート部分の 2 つの部分があります。

ソースコード分析部分:

各 Python モジュールについて、Pylint の結果には最初にいくつかの「*」文字が表示され、その後にモジュールの名前が表示され、その後に一連のメッセージが表示されます。メッセージの形式は次のとおりです。

MESSAGE_TYPE: LINE_NUM:[OBJECT:] MESSAGE

MESSAGE_TYPE には次のタイプがあります:

(C) 規約。コーディング スタイル標準
(R) リファクタリングに違反します。非常に貧弱に書かれたコード。
(W) 警告。 Python 固有の質問。
(E) エラー。おそらくコードのバグです。
(F) 致命的なエラー。 Pylint のそれ以上の実行を妨げるエラー。

リスト 2. Pylint での utils モジュールの出力結果

************** Module utils
C: 88:Message: Missing docstring
R: 88:Message: Tooいくつかのパブリック メソッド (0/2)
C:183:MessagesHandlerMixIn._cat_ids: ドキュメント文字列がありません
R:183:MessagesHandlerMixIn._cat_ids: メソッドは関数である可能性があります
R:282:MessagesHandlerMixIn.list_messages: ブランチが多すぎます (14/12)

レポート セクション:

ソース コード分析が完了すると、各カテゴリのメッセージ数、モジュールの依存関係など、プロジェクトの特定の側面に焦点を当てた一連のレポートが作成されます。 。具体的には、レポートには次の側面が含まれます:

  • チェックされたモジュールの数。

  • 各モジュールのエラーと警告の割合。たとえば、2 つのモジュール A と B があります。合計 4 つのエラーが検出され、A に 1 つのエラーが、B に 3 つのエラーが検出された場合、A のエラーの割合は 25%、B のエラーの割合は 75% になります。 。

  • エラーと警告の合計数。

Pylintを使用してPythonコードを分析する具体的な例

以下は、xmlファイルからいくつかの値を読み取り、それらを表示するPythonコードdw.pyです。コードは次のとおりです。 3. ソースコード

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;)


リスト 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(&#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,可以看到报告部分的内容。

结束语

この記事では、詳細な理論的紹介とわかりやすい例を通じて、Python コード分析ツール Pylint について包括的に紹介します。これを読んだ読者は、Pylint を自分の開発プロジェクトに簡単に適用できるようになると思います。

関連トピック

  • Pylint公式ウェブサイト。

  • logilab-astng の最新パッケージのダウンロード。

  • logilab-common の最新パッケージのダウンロード。

  • optik パッケージのダウンロード。

  • Pylint の最新パッケージのダウンロード。

  • Python コード スタイル標準 PEP 8 -- Python コードのスタイル ガイドをダウンロードしてご覧ください。

  • Python の詳細については、developerWorks の Python トピックを参照してください。

関連する推奨事項:

Python コードチェックツール pylint を使用すると、Python がより標準化されます

以上がPylint を使用して Python コード スタイルを標準化する方法 (IBM より)_pythonの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。