Python のコードを快適に書くための設定をまとめてみる

最近、仕事でもプライベートでも Python でコードを書くことが増えてきました。
また、このサイトでも以前書いた Python とか Django 関連の記事へのアクセスが一定あるので、同じような方も結構多いのかなと思っています。

自分用メモとそういった方に役立てばという思いから、私が個人的に使っているような設定とか環境についてまとめておきます。

以前書いた記事

現在使っている環境

基本的には前述の記事にあるように、

  • エディタ: Visual Studio Code(以下 VSCode)
  • パッケージ管理: Pipenv

に加え、必要に応じて Docker を使うことが多いです。
必要に応じてというのは、簡単なツールを作るぐらいなら使わないとかそんな感覚です。
Python 自体が基本的に Mac や Linux にプリインストールされており、Windows でも WSL (Windows Subsystem for Linux) があるため、環境構築にそこまで困らないケースも多いので。

Pipenv 関連でやっていること

基本的には前述の記事にあるような「スクリプト化」ぐらいです。
pycodestyle とか autopep8 とかのコードチェック関連やデプロイのコマンドを書くことが多いです。
Pipfile に以下のようなスクリプトを書いて、

[dev-packages]
autopep8 = "*" # autopep8 をインストールすればコードチェックを行う pycodestyle もインストールされる

[scripts]
code_check = "pycodestyle ."
code_format = "autopep8 --in-place --recursive ."

CLI や CI 環境から以下コマンドで実行するようなイメージです。

$ pipenv run code_check # コードチェックを実施
$ pipenv run code_format # ルールに則ったコードフォーマットを実施

pycodestyle のルールについては、setup.cfg というファイルに細かい制御を書くことができます。
これは他のコードチェックライブラリ(flake8 とか)も同様です。

[pycodestyle]
max-line-length = 160 # 行当たりの最大文字数を160とする
ignore = E226 # 特定のルールを無視する場合はここにカンマ区切りで書く

VSCode 関連でやっていること

以下拡張をインストールします。

その後、プロジェクト単位で(settings.json に)以下のような設定をします。

{
  "editor.formatOnSave": true,
  "python.venvPath": "{pipenv で作成した環境のパス(pipenv --venv で確認できる)}",
  "python.pythonPath": "{pipenv で作成した環境のパス}/bin/python",
  "python.autoComplete.extraPaths": [
    "{pipenv で作成した環境のパス}/lib/{ここは python のバージョンによって異なる}/site-packages/"
  ],
  "python.linting.pycodestyleEnabled": true,
  "python.linting.pycodestylePath": "{pipenv で作成した環境のパス}/bin/pycodestyle",
  "python.formatting.autopep8Path": "{pipenv で作成した環境のパス}/bin/autopep8"
}

各項目はあえて説明するほどでもない気がしますが、1つあるとすれば python.autoComplete.extraPaths ですかね。
この項目は VSCode 上で補完とかジャンプを機能させるために依存ライブラリが存在するパスを指定してやります。
editor.formatOnSave は保存時に自動フォーマットするかどうかで、前述の設定だと autopep8 を使ってフォーマットしてくれます。

ちなみに、これらのパスは Windows かどうかで微妙に異なります。
Windows の場合各バイナリファイルは .exe が必要ですし、それ以外にも
binScripts
lib/{ここは python のバージョンによって異なる}/site-packages/Lib/site-packages
読みかえる必要があります。

ちなみに、これらの設定がされていれば、VSCode 内でターミナルを立ち上げると自動で仮想環境に入ってくれます。

# ターミナル実行時、このコマンドが自動で実行される
$ source {pipenv で作成した環境のパス}/bin/activate
# 仮想環境に入った状態でターミナルが開かれる
(環境名) $
(環境名) $ python -V # 仮想環境に設定したものが使われる
(環境名) $ autopep8 # autopep8 をインストールしている場合は左記のように利用可能
(環境名) $ deactivate # 仮想環境から抜ける場合は以下

ちなみに、Pipfile は toml 形式のファイルなので、toml のシンタックスハイライトが効く拡張機能(TOML Language Support とか)を入れておくと良いかもしれません。

Docker 関連でやっていること

これはまた後日まとめたいと思います。

ひとまず簡単にまとめてみました。
皆様も良い Python ライフを。