ホームページ  >  記事  >  バックエンド開発  >  Python コード チェック ツール pylint を使用すると、Python がより標準化されます。

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

WBOY
WBOYオリジナル
2016-06-16 08:46:571433ブラウズ
1. パイリントとは何ですか?

Pylint は Python コード分析ツールです。Python コード内のエラーを分析し、コード スタイル標準に準拠していないエラーを探します (詳細については、Pylint で使用されるデフォルトのコード スタイルは PEP 8 です)。 、参考資料を参照してください)と問題が発生する可能性のあるコード。現在の Pylint の最新バージョンは pylint-0.18.1 です。

Pylint は、通常のコード分析ツールの機能に加えて、コード行の長さのチェック、変数名が命名標準に準拠しているかどうかのチェックなど、より多くの機能を提供します。宣言されたインターフェイスが本当に実現されるかどうかなど。
Pylint の大きな利点は、高度に構成可能で、高度にカスタマイズ可能であり、機能を追加するための小さなプラグインを簡単に作成できることです。

Pylint を 2 回実行すると、現在の実行と最後の実行の両方の結果が表示され、コードの品質が向上したかどうかを確認できます。

Pylint は現在、Eclipse の pydev プラグインにも統合されています。

pylint は、Guido van Rossum の PEP8 に基づいた Python コード スタイル チェック ツールです。

pylint は PyChecker に似ていますが、コード行の長さのチェック、変数の名前付けがコーディング標準に準拠しているかどうかのチェック、宣言されたインターフェイスが実際に実装されているかどうかのチェックなど、より多くの機能を提供します。 http://www.logilab.org/card/pylintfeatures を参照してください。

pylint の最大の利点は、高度な構成とカスタマイズが可能であることです。個人用の機能を追加するための小さなプラグインを簡単に作成できます。

インストール方法:pip install pylint

参考リンク:

http://www.ibm.com/developerworks/cn/aix/library/au-cleancode/index .html

http://www.douban.com/note/46830857/

http://zh.wikipedia.org/wiki/Pylint

2. なぜ pylint を使用するのですか?

良いコードを書くために。良いコードとは何ですか?チームのコーディング習慣に準拠したコード: 統一された名前と構造。

類似商品にはどのようなものがありますか? PyChecker

他に何か追加することはありますか?

3. pylint の使い方

基本的な使用法:

3 種類のコードで時間をテストします。スコアは 1 から始まります。pylint のプロンプトに従って再構築を続け、最終的に 10 点を取得します。
v1_fetch.py​​:
コードをコピー コードは次のとおりです:

#coding:utf-8
import urllib
インポート時間

def a(url):
content = urllib.urlopen(url).read()
f = open('tmp%s.html' % str(time .time()), 'w')
f.write(content)
f.close()

def main(urls):
URL 内の URL の場合:
a(url)

if __name__ == '__main__':
urls = ['http://www.baidu.com','http://www.sohu.com' ]
main(urls)

名前を変更します:
v2_fetch.py​​:
コードをコピー コード

#coding:utf-8
import urllib
インポート時間

def fetch(url):
content = urllib.urlopen( url).read()
f_html = open('tmp%s.html' % str(time.time()), 'w')
f_html.write(content)
f_html.close( )

def main(urls):
url 内の url:
fetch(url)

if __name__ == '__main__':
from_urls = ['http ://www.baidu.com','http://www.sohu.com']
main(from_urls)

再度変更されました:
v3_fetch.py​​:
コードをコピー コードは次のとおりです:

#coding:utf-8
'''
テスト関数モジュール
'''
import urllib
インポート時間

def fetch(url):
'''
URL を取得
'''
content = urllib.urlopen(url).read ()
f_html = open('tmp%s.html' % str(time.time()), 'w')
f_html.write(content)
f_html.close()

def main(urls):
'''
呼び出されるメイン関数
'''
URL 内の URL:
fetch(url)

if __name__ == '__main__':
FROM_URLS = ['http://www.baidu.com','http://www.sohu.com']
メイン(FROM_URLS)

基本的に以下の判断基準があります:

1. 命名方法

2. docstring

もちろん、パッケージの検出に pylint を直接使用することも可能です。 : pylint パッケージ

使用方法の詳細については、以下を参照してください。必ず自分で練習してください:

内容を参照してください:

Pylint 呼び出し

リスト 1. Pylint 呼び出しコマンド
pylint [options] module_or_package

Pylint を使用してモジュールのコードを確認する module.py:
1. モジュールが存在するフォルダーに入り、pylint を実行します。 [options] module.py
現在の作業ディレクトリが Python パスに自動的に追加されるため、この呼び出しメソッドは常に機能します。

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

Pylint を使用してパッケージのコードを確認します:
1. パッケージが存在するフォルダーに入り、pylint [options] pakage を実行します。
現在の作業ディレクトリが Python パスに自動的に追加されるため、この呼び出しメソッドは常に機能します。

2. パッケージが置かれているフォルダーを入力せずに、pylint [options] directory/pakage を実行します。
この場合、次の条件が満たされると機能します: ディレクトリが 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=

設定ファイルを指定します。使用する構成を構成ファイルに含めると、独自のコードが標準化されるだけでなく、これらの仕様を他のユーザーと簡単に共有できるようになります。
-i , –include-ids=

出力にメッセージの ID を含め、pylint –help-msg= を使用してエラーの詳細情報を表示します。具体的に位置すること。
-r , –reports=

デフォルトは y です。これは、ソース コード分析部分に加えて、Pylint の出力にはレポート部分も含まれることを意味します。
–files-output=

各モジュール/パッケージのメッセージを pylint_module/package という名前のファイルに出力します。レポートがある場合は、 pylint_global .[txt|] に出力します。 html]ファイル。デフォルトでは、ファイルではなく画面に出力されます。
-f , –output-format=

出力形式を設定します。選択できる形式は、テキスト、解析可能、カラー化、msvs (ビジュアル スタジオ)、および html です。デフォルトの出力形式はテキストです。
–disable-msg=

指定された ID のメッセージを無効にします。たとえば、出力に警告メッセージ W0402 を表示したくない場合は、-disable-msg を使用できます。 = W0402
Pylint の出力
Pylint のデフォルトの出力形式は、-f、-output-format= を使用して 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: パブリック メソッドが少なすぎます (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('DW')
組織内の組織の場合:
products = org.getElementsByTagName('linux')
製品内の製品の場合:
print 'ID: ' + product.getAttribute('id')
print 'Name: ' + product.getAttribute('name')
print '単語数: ' + product.getAttribute(' count')

リスト 4.identity.xml の内容





この時点で Pylint を使用した結果(これは HTML 形式の出力をコピーしたものです) は次のとおりです:

リスト 5. Pylint の分析結果
****************** Module dw
C:1: ドキュメント文字列がありません
C: 5: 演算子の前にスペースがありません xmlDom=xml.dom.minidom.parse(“identity.xml”) ^
C:5: 無効な名前 “xmlDom” ( (([A-Z_][A- Z0-9_]*)|(__.*__))$)
C:6:無効な名前「organizations」 ((([A-Z_] [A-Z0-9_]*)|(__ .*__))$)

レポート部分は省略されました

出力の最初の部分はソース コード分析であり、2 番目の部分は報告書。出力には非常に多くの情報がありますが、どこから始めればよいでしょうか?まず、次の手順でコードを分析します。
1. 出力結果が長すぎるため、最初にレポート部分を出力させず、最初にソースコード分析部分に基づいてコードの問題を見つけます。 。オプション「--reports=n」を使用します。
2. オプション「–include-ids=y」を使用します。ソースコード解析部分の各情報のIDを取得できます。

リスト 6. pylint を使用した結果 –reports=n –include-ids=y dw.py
**************** Module dw
C0111: 1 : ドキュメント文字列がありません
C0322: 5: 演算子の前にスペースがありません xmlDom=xml.dom.minidom.parse(“identity.xml”) ^
C0103: 5: 無効な名前「xmlDom」 ( match (( [A-Z_][A-Z0-9_]*)|(__.*__))$)
C0103: 6: 無効な名前「organizations」 ((([A-Z_][ A-Z0 -9_]*)|(__.*__))$)

各メッセージの前に ID が表示されます。このメッセージの意味がわからない場合は、次のメッセージを参照してください。 pylint –help-msg=id 。

リスト 7. pylint –help-msg= C0111
C0111: *Missing docstring*
モジュール、関数、クラス、またはメソッドに docstring がない場合に使用されます。
__init__ のようなメソッドには docstring は必要ありません。
このメッセージは基本チェッカーに属します。

3. 各ソース コードの問題の分析を開始します。上記のことから、最初の問題の原因は docstring の不足であることがわかります。変更されたコードは次のとおりです。

リスト 8. 変更されたソース コード
。 #!/usr/bin /env python

"""このスクリプトは XML ファイルの内容を解析します"""

import xml.dom.minidom

xmlDom= xml.dom.minidom.parse("identity.xml")
organizations = xmlDom.getElementsByTagName('DW')
組織内の組織の場合:
products = org.getElementsByTagName('linux')
製品内の製品の場合:
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. 実行結果
** ****** ***** モジュール dw
C0322: 7: 演算子の前にスペースがありません
xmlDom=xml.dom.minidom.parse(“identity.xml”)
^
C0103: 7: 無効な名前「xmlDom」 ((([A-Z_][A-Z0-9_]*)|(__.*__))$ と一致する必要があります)
C0103: 8: 無効な名前「 (([A-Z_][A-Z0-9_]*)|(__.*__))$)

ソース コードの最初の問題が次のとおりであることがわかります。解決しました。
4. 2 番目の C0322 の問題については、コードの 7 行目の等号演算子の両側にスペースがないことが、この分析結果で明確に説明されています。ここにスペースを追加して pylint –reports=n –include-ids=y dw.py を再実行すると、結果は次のようになります:

リスト 10. 実行結果
******** * *** モジュール dw
C0103: 7: 無効な名前「xmlDom」 ((([A-Z_][A-Z0-9_]*)|(__.*__))$ と一致する必要があります)
C0103 : 8: 無効な名前「organizations」 ((([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

"""このスクリプトは xml ファイルの内容を解析します"""

import xml.dom.minidom

xmldom = xml.dom.minidom.parse( "identity.xml")
organizations = xmldom.getElementsByTagName('DW')
組織内の組織の場合:
products = org.getElementsByTagName('linux')
製品内の製品の場合:
print 'ID: ' + product.getAttribute('id')
print 'Name: ' + product.getAttribute('name')
print '単語数: ' + 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 > を実行することもできます。オプションは直接 '[a-z_][a-z0-9_]{2,30}$' です。
今後 Pylint を実行するときに設定ファイルを指定します: pylint –rcfile=pylint.conf dw.py
このように、Pylint は設定ファイル pylint.conf のオプションに従ってパラメーターを指定します。部門内の全員が同じ構成ファイルを使用して、一貫したコーディング スタイルを維持できます。

7. –reports=n を使用せずにレポート パーツを追加すると、レポート パーツの内容が表示されます。

これに関連する:

コードレビューツール:

http://www.cnblogs.com/LiGleam/archive/2012/02/19/2358549.html

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