はじめに
プライベートや仕事などでPythonを用いた開発を行う際、毎回使うライブラリ/ツールはあるかと思います。 新しく使い始めたものもあれば使わなくなったものあり、時間が経つにつれて少しずつ変化していっているので、個人的な忘備録も兼ねて2020年12月現在でよく用いるライブラリ/ツールについてまとめてみました。 簡単なインストール方法とともに紹介したいと思います。 また、データ分析やWebフレームワークなどは触れません。
基本のライブラリ/ツール
ちょっとしたスクリプトでも入れることの多い基本的なライブラリとツールの紹介です。
pyenv
Pythonのバージョン管理ツールです。複数のバージョンを切り替えて使いたいときに便利です。
brew install pyenv
仮想環境は標準ライブラリのvenvか次に紹介するpoetryを使うので、 pyenv-virtualenvは使っていないです。
様々な**envをまとめて管理できるanyenvを使っていましたが、ターミナルの起動を早くするためにanyenvはやめました。また、設定でeval "$(pyenv init - --no-rehash)"
と--no-rehash
をつけると起動時にrehash
しなくなるので早くなります。
また、rubyのrbenvの影響を受けています。ちなみに、rbenv install -l
では各バージョンの最新版のみ表示されますが、pyenv install -l
ではすべて表示されるので少し見づらいです。。
Poetry
Pythonのパッケージ管理ツールです。仮想環境の構築も行います。PythonパッケージのビルドやPyPIなどのパッケージ管理サイトへのアップロードもできます。
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
パッケージ管理ツールとしてはPipenvがメジャーですが、Poetryは比較的新しいツールで今も開発が盛んです。
Pipenvでできることはだいたいできます。今年、Pipenvから切り替えましたが今の所困ったことはないです。依存関係の解決がPipenvより高速で、Pythonパッケージをビルドや配布はPipenvではできないので、Poetryはおすすめです。
flake8
コーディング規約であるPEP8に従っているかやエラーチェックなど行うLinterです。
pip install flake8
複数人で開発する場合でも1人の場合でも、とりあえず入れておくと良いと思います。VSCodeで設定していると入れてないとインストールを促してくるので、ちょっとしたスクリプトでも入れることが多いです。
設定は以下をベースに使っています。後述のblackが88行なので、flake8も88行にしています。
[flake8] max-line-length = 88 convention = google
isort
importの並び替えを行うライブラリです。
pip install isort
設定は以下を用いています。複数行をどう扱うかはmulti_line_output
で設定できます。こちらの例を見るのが分かりやすいです。blackに合わせるため3
の形式にしています。
[isort] include_trailing_comma = true line_length = 88 multi_line_output = 3
black
Pythonのコードを自動で整形するツールです。
pip install black
autopep8やyapfと同じくコードフォーマッターですが、後発のツールです。いろいろな書き方をさせないため制限が厳しく、設定ファイルはありますが設定はほとんどできません。
以前はyapfを使っていましたが、最近はblackを使うことが多くなりました。こちらもflake8やisortとセットで基本的にはインストールしています。
開発で使うライブラリ/ツール
一時的な作成する実験的なスクリプトではなく、Gitで管理してGithubにあげるようなプロジェクトで使うライブラリとツールの紹介です。
pre-commit
Gitでコミットする前に実行されるpre-commit hookを管理するツールです。
brew install pre-commit pip install pre-commit
Python製のライブラリなのでpipでインストールできますが、macの場合はhomebrewでもインストールできます。 チェックできるスクリプトはこれまでに紹介したflake8, isort, blackなどのPythonライブラリはもちろん他の言語でも使うことができます。 なので、homebrewでインストールするほうが良いかもしれません。
手動でflake8などのLinterを実行すると忘れることもあるので、自動でチェックできるので便利です。 コードレビューで指摘されたり、CIでエラーになったりすることがなくなるので入れておいて損はないと思います。
設定ファイルはYAML形式で以下のように書きます。拡張ライブラリも使えます。
repos: - repo: https://gitlab.com/pycqa/flake8 rev: 3.8.4 hooks: - id: flake8 additional_dependencies: - flake8-bugbear==20.1.4 - flake8-docstrings==1.5.0
pre-commit run
とコマンドを叩けば、手動で実行することもできます。
flake8-bugbear
flake8-bugbearはバグになりそうなコードを検知するflake8のプラグインです。
pip install flake8-bugbear
flake8のプラグインなので、flake8を実行するだけで同時に検知できます。
例えば、以下のような文法上は問題ないコードでも、バグが発生しやすいところは検知してくれます。
def f(x=[]): pass
./main.py:1:9: B006 Do not use mutable data structures for argument defaults. They are created during function definition time. All calls to the function reuse this one instance of that data structure, persisting changes between them.
ちなみに、デフォルト引数値は関数定義が実行されるときに評価されるので、ミュータブルなオブジェクトは使用するのは好ましくないです。
flake8-docstrings
flake8を拡張し、docstringのチェックも対応するライブラリです。
pip install flake8-docstrings
_
ではじめまるプライベートメソッドやモジュール以外でdocstringを書いてなかったり、書いている場合でもはじめが大文字で始まってなかったりすると指摘されます。docstringを書く癖をつけるためにも入れておくと良いでしょう。
mypy
型ヒントのチェックを行うツールです。
pip install mypy
mypy(というより型ヒント)は最近使い始めました。int
やstr
といったシンプルな型であれば付ける必要はないかもしれませんが、Dict[str, int]
のように辞書のキーの型など複雑になればなるほどあると便利だと思います。
ツールの動きとしては、例えば、以下のように引数x
の型ヒントはint
だけど文字列入れていたり、返り値はstr
としているが、実際は返り値がなかったりするとエラーとして検知します。
def f(x: int) -> str: x = "str"
main.py:1: error: Missing return statement [return] main.py:2: error: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment]
使用している設定は以下です。
[mypy] ignore_missing_imports = true show_error_codes = true
まとめ
現時点で使用しているPythonのライブラリやツールに紹介しました。今年から使い始めたものをあるので、来年になったら変わっているかもしれませんが、紹介したものは便利なものばかりだと思いますので参考になれば幸いです。
また、poetryでまとめインストールするには以下のようにすれば可能です。
poetry add --dev flake8 isort black flake8-bugbear flake8-docstrings mypy
Pythonのライブラリについてはawesome-pythonも参考になると思います。