概要
前回、前々回とpudbについて書きました。
pudbのdocument見ると、pytestからpudb起動も出来るとのこと。
Getting Started — pudb 2.0.1.7...1...4 documentation
普段からpytest使っているので、これは期待大。
環境作り
まだpytest入れてなかったので、インストール
$ conda install pytest Solving environment: done ## Package Plan ## environment location: /Users/xxxx/anaconda3/envs/pudb added / updated specs: - pytest The following NEW packages will be INSTALLED: attrs: 17.3.0-py36h9f37037_0 coverage: 4.4.2-py36h8d5022f_0 hypothesis: 3.38.5-py36hcba0581_0 pluggy: 0.6.0-py36hb1d0581_0 py: 1.5.2-py36ha69170d_0 pympler: 0.5-py36hc2752d1_0 pytest: 3.3.0-py36h707cbdc_0 zope: 1.0-py36_0 zope.interface: 4.4.3-py36h74e83c9_0 Proceed ([y]/n)? Preparing transaction: done Verifying transaction: done Executing transaction: done
で、pytestとpudbを連携させるには pytest-pudb
モジュールが必要とのこと。
これは、conda 側には存在しなかったので、pip
でインストールします。
$ pip install pytest-pudb Collecting pytest-pudb Downloading pytest-pudb-0.5.tar.gz Requirement already satisfied: pytest>=2.0 in /Users/xxxx/anaconda3/envs/pudb/lib/python3.6/site-packages (from pytest-pudb) Requirement already satisfied: pudb in /Users/xxxx/anaconda3/envs/pudb/lib/python3.6/site-packages (from pytest-pudb) Requirement already satisfied: py>=1.5.0 in /Users/xxxx/anaconda3/envs/pudb/lib/python3.6/site-packages (from pytest>=2.0->pytest-pudb) Requirement already satisfied: six>=1.10.0 in /Users/xxxx/anaconda3/envs/pudb/lib/python3.6/site-packages (from pytest>=2.0->pytest-pudb) Requirement already satisfied: setuptools in /Users/xxxx/anaconda3/envs/pudb/lib/python3.6/site-packages (from pytest>=2.0->pytest-pudb) Requirement already satisfied: attrs>=17.2.0 in /Users/xxxx/anaconda3/envs/pudb/lib/python3.6/site-packages (from pytest>=2.0->pytest-pudb) Requirement already satisfied: pluggy<0.7,>=0.5 in /Users/xxxx/anaconda3/envs/pudb/lib/python3.6/site-packages (from pytest>=2.0->pytest-pudb) Requirement already satisfied: urwid>=1.1.1 in /Users/xxxx/anaconda3/envs/pudb/lib/python3.6/site-packages (from pudb->pytest-pudb) Requirement already satisfied: pygments>=1.0 in /Users/xxxx/anaconda3/envs/pudb/lib/python3.6/site-packages (from pudb->pytest-pudb) Building wheels for collected packages: pytest-pudb Running setup.py bdist_wheel for pytest-pudb ... done Stored in directory: /Users/xxxx/Library/Caches/pip/wheels/95/86/34/64371b05b550e6f506a93ff981be3383bc92b745b7805d63fd Successfully built pytest-pudb Installing collected packages: pytest-pudb Successfully installed pytest-pudb-0.5
これで、環境は出来たはず。
試してみる
てことで、以下のようなドウデモイイサンプルを用意しました。
""" pudb module sample script. """ def main(): total = 0 for x in range(10): total += x return x, total def test_main(): results = main() assert results == (9, 55) if __name__ == '__main__': main()
assert の部分が明らかにオカシイっていう。とりあえず fail させて pudb 起動するか確認したいってことで。
pytest と pudb を連携させるには、以下のようにコマンド入力します。
$ pytest --pdbcls pudb.debugger:Debugger --pdb --capture=no
ちょっと長いけど、エイリアスでも切っておけばいいかな。
では、試してみます。
$ pytest --pdbcls pudb.debugger:Debugger --pdb --capture=no pudb_sample.py
実行すると、以下のようにpudbが起動しました。
バッチリ。pudb最高です。
画面右上に PROCESSING EXCEPTION - hit 'e' to examine
って出ています。
その通りに、e
をタイプすると、ちゃんとスタックトレースが表示されます。
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場