とほほのPython入門 - Python関連ツール

トップ > Python入門 > Python関連ツール

目次

pip - パッケージ管理

Python関連のパッケージ(ツールやライブラリ)を管理します。ここで紹介する pip 以外のツールは、いずれも 「pip install ツール名」で簡単にインストールできるものです。Python 3系の場合は pip3 という名前の場合があります。

Shell
$ pip install package_name     // パッケージをインストールする
$ pip uninstall package_name   // パッケージをアンインストールする
$ pip search package_name      // リポジトリからパッケージを探す
$ pip list                            // インストール済みパッケージを表示する

pylint - コーディングチェッカ

Python プログラムを解析し、バグの原因となりそうな箇所をチェックします。

Shell
$ pip install pylint                  // pylint をインストールする
$ pylint ./src                        // ./src 配下のソースをチェックする

flake8 - コーディングスタイルチェッカ

Python プログラムが PEP8 と呼ばれる Python のコーディングスタイルに従っているか、および簡単なエラーチェックを行います。pycodestyle というスタイルチェッカ、pyflakes というエラーチェッカ、mccabe という複雑度チェッカを内部で利用しています。

Shell
$ pip install flake8                  // flake8 をインストールする
$ flake8 ./src                        // ./src 配下のソースをチェックする

black - コーディングスタイルフォーマッタ

Python プログラムを PEP8 と呼ばれる Python のコーディングスタイルに準拠するように自動フォーマットします。

Shell
$ pip install black                   // black をインストールする
$ black ./src                         // ./src 配下のソースをフォーマットする
$ black --diff ./src                  // ファイルは書き換えずに修正案のみを表示<する/span>
$ black -l 140 ./src                  // 1行の長さ上限を88文字から140文字に緩和する

pdb - Pythonデバッガ

Python に標準添付されるシングルラインデバッガです。まず、プログラムの中に下記の1行を埋め込みます。

sample.py
import pdb; pdb.set_trace()

プログラムを実行すると上記コードを埋め込んだ箇所でデバッガに制御が移り、デバッガコマンドを使用できるようになります。

Shell
$ python sample.py
-> ret = add(3, 5)
(Pdb) s
(Pdb) q

デバッガコマンドには下記などがあります。

Commands
h       // ヘルプ表示
l       // 周辺のソースコード表示
s       // 1ステップ実行(関数の中に入る)
n       // 1ステップ実行(関数の中に入らない)
c       // 次のブレークポイントまで実行
r       // 現在の関数が終わるまで実行
p exp   // 変数expの値を表示
q       // デバッガを終了

pudb - Python CUIデバッガ

CUIを用いたビジュアルなデバッガツールです。

Shell
$ pip install pudb                    // pudb をインストールする

pdb と同様、プログラムの中に下記の1行を埋め込みます。

sample.py
import pudb; pudb.set_trace()

プログラムを実行すると上記コードを埋め込んだ箇所でデバッガに制御が移り、グラフィカルにデバッガコマンドを使用できるようになります。使用できるコマンドは、ほぼ pdb と同様です。

pytest - ユニットテスト

シンプルなユニットテスト(単体テスト)ツールです。まず、テストプログラムを記述します。assert 文でテストの内容を記述します。

test_case1.py
def test_case1():
    ret = add(3, 5)
    assert ret == 8

下記の様に実行します。test_*.py にマッチするファイルの test で始まる関数、および、Test で始まるクラスの test で始まるメソッドが実行の対象となります。

sample.py
$ pip install pytest                  // pytest をインストールする
$ pytest ./tests                      // tests フォルダ配下の単体テストを実行する
============= FAILURES ===============
def test_case1():
    ret = add(3, 5)
>   assert ret == 8
E   assert 10 == 8
========== 1 failed in 0.08s =========

unittest - ユニットテスト

pytest と同様のユニットテストツールです。まず、テストプログラムを書きます。test で始まるファイル名、unittest.TestCase を継承するクラス、test で始まるメソッド名にしてください。

./tests/test_case1.py
import unittest
from lib.mysample import myfunc

class TestCase1(unittest.TestCase):

    def test_case_1_1(self):
        ret = myfunc(3, 5)
        self.assertEqual(ret, 8)

if __name__ == "__main__":
    unittest.main()

下記の様に実行します。

Shell
$ python ./tests/test_case1.py

カレントディレクトリ配下のファイルを探索して実行することもできます。各ディレクトリには __init__.py が必要です。

Shell
$ python -m unittest discover -v
test_case_1_1 (tests.test_case1.TestCase1) ... ok
----------------------------------------------------------------------
Ran 1 tests in 0.001s
OK

coverage - ユニットテストの網羅度チェック

unittest のテスト網羅度を集計します。

Shell
$ pip install coverage                          // coverage をインストールする
$ coverage run --append ./tests/test_case1.py   // テスト1を実行する
$ coverage run --append ./tests/test_case2.py   // テスト2を実行する
$ coverage report -m                            // テスト結果(.coverage)をレポートする
Name                  Stmts   Miss  Cover   Missing
---------------------------------------------------
lib/calc.py              10      1    90%   11
tests/test_case1.py      11      0   100%
tests/test_case2.py      11      0   100%
---------------------------------------------------
TOTAL                    32      1    97%
$ coverage html                                 // HTMLレポート(.htmlcov)を生成する
$ coverage erase                                // テスト結果(.coverage)を削除する

cloc - プログラム行数カウンタ

Python 専用ツールではありませんが、様々な言語のプログラム行数をカウントします。files, blank, comment, code はそれぞれファイル数、空白行数、コメント行数、プログラム行数を示します。

Shell
$ yum install -y cloc                           // cloc をインストールする
$ cloc ./src                                    // ./src 配下のプログラム行数を調べる
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                           1              0              0             11
JavaScript                       1              3              2              8
-------------------------------------------------------------------------------
$ cloc --by-file ./src                          // ファイル毎に行数を表示する
$ cloc --diff ./src1 ./src2                     // ./src1 から ./src2 への修正行数を調べる

pyscss - Scssコンパイラ

CSS を拡張した、SCSS 形式の Sass ファイルを CSS 形式にコンパイルします。

style.scss
$default-font-size: 9pt;
body { font-size: $default-font-size; }
Shell
$ pip3 install pyscss                           // pyscss をインストールする
$ pyscss style.scss -o style.css                // SCSS を CSS にコンパイルする
$ pyscss -w ./css                               // ./css フォルダを監視して更新時に自動コンパイルする

bandit - 静的脆弱性検証ツール

ソースコードを解析し、セキュリティ的な問題を含む可能性のあるコードを洗い出します。下記の例では「パスワードがハードコーディングされている」といった、セキュリティ上の問題点をレポートしています。

Shell
$ pip3 install bandit                           // bandit をインストールする
$ bandit -r .                                   // カレントディレクトリ配下をチェックする
>> Issue: [B105:hardcoded_password_string] Possible hardcoded password: 'AgBx8#4G98F'
   Severity: Low   Confidence: Medium
   Location: ./sample.py:5
   More Info: https://bandit.readthedocs.io/en/latest/plugins/b105_hardcoded_password_string.html
4
5       password = 'AgBx8#4G98F'

Copyright(C) 2020 杜甫々
初版:2014年12月30日、最終更新:2018年2月5日
http://www.tohoho-web.com/python/tools.html