この記事では、詳細な理論的紹介とわかりやすい例を通じて、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 [options] 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 インストール パスに 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 [options] directory/module.py<br>
这种调用方式当如下条件满足的时候是可以工作的:directory 是个 Python 包 ( 比如包含一个 __init__.py 文件 ),或者 directory 被加入了 Python 的路径中。
使用 Pylint 对一个包 pakage 进行代码检查:
1. 进入这个包所在文件夹,运行 pylint [options] pakage
pylint [options] pakage
を実行します。 pylint [options] directory/ pakage
2. パッケージが存在するフォルダーに入らずに
さらに、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
出力にメッセージ ID を含めて、pylint --help-msg=
-r
デフォルトは y で、Pylint の出力にはソースコード分析部分だけでなくレポート部分も含まれることを意味します。
--files-output=
各モジュール/パッケージのメッセージを pylint_module/package.[txt|html] という名前のファイルに出力します。レポートがある場合は、そのファイルに出力します。ファイル pylint_global.[txt|html] 内。デフォルトでは、ファイルではなく画面に出力されます。
-f
出力形式を設定します。選択できる形式は、テキスト、解析可能、カラー化、msvs (ビジュアル スタジオ)、および html です。デフォルトの出力形式はテキストです。
--disable-msg=
たとえば、出力に警告メッセージ W0402 が含まれている場合、出力に表示したくない場合は、次のように指定できます。 --disable- msg= W0402
Pylint の出力
Pylint のデフォルトの出力形式は、-f
ソースコード分析部分:
各 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)
レポート セクション:
ソース コード分析が完了すると、各カテゴリのメッセージ数、モジュールの依存関係など、プロジェクトの特定の側面に焦点を当てた一連のレポートが作成されます。 。具体的には、レポートには次の側面が含まれます: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') 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')
リスト 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 の詳細については、developerWorks の Python トピックを参照してください。
関連する推奨事項:
Python コードチェックツール pylint を使用すると、Python がより標準化されます
以上がPylint を使用して Python コード スタイルを標準化する方法 (IBM より)_pythonの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。