LoginSignup
0
1

More than 3 years have passed since last update.

VS-Codeでpyenv環境のpylint, pycodestyleを使う

Last updated at Posted at 2021-03-20

はじめに

意外と探して答えにたどり着かなかったので設定方法をメモします。

環境

  • Ubuntu 18.04 LTS (Windows 10; WSL)
  • Python 3.8.8 (pyenv)

設定方法

まずは結論だけ書く。
VS-Code の設定は User / Remote / Workspace とあるが、今回は Remote に設定をした。
Remote環境(WSL)共通の設定なので。

1. pythonコマンドのパスを設定する

最初にプロジェクトを開いたときにPythonをどれを使うか聞かれますが、そのときに適切なものを選択している場合は、設定済みとなります。

未設定か設定が正しくない場合の設定方法を記載します。
pythonコマンドのインストール先は環境依存なので、Remote タブで設定を加えます。
python.pythonPath (紛らわしい)の項目にPythonコマンドのパスを設定します。shell で type python とか叩くと絶対パスは分かる。

image.png

Using Python Environments in Visual Studio Codeによると、標準のパスは /usr/local/bin, /usr/sbin, /sbin から探すとある。

2. フォルダ階層

次のような階層でコードを想定した設定例を示す。

(top)
 ├ .vscode/setting.json ... Workspaceの設定ファイル
 ├ src/ ... ソースコード置き場
 ├ tests/ ... テストコード置き場
 ├ .env ... 環境変数設定ファイル
 ├ requirements.txt ... 依存パッケージ
 └ LICENSE ... ライセンスファイル(今回は関係ない)

.envファイルの例

PYTHONPATH="src:tests"

requirements.txtの例(pytest)

pycodestyle>=2.7.0
pylint>=2.6.0
pytest>=6.2.2
pytest-cov>=2.11.1
autopep8>=1.5.6

requirements.txtの例(unittest)

autopep8>=1.5.6
coverage>=5.5
pycodestyle>=2.7.0
pylint>=2.6.0
  • 独自のPYTHONPATHを設定したいなら、.env ファイルにPYTHONPATHを定義すると良い
  • .env というファイル名が気に入らなければ、 python.envFile でファイル名を変更することができる

3. pipパッケージのインストール

python -m pip install -r requirements.txt

4. Lint関連の設定

4.a. pycodestyle を有効にする

次のことをする。

  • pycodestyleをインストールする
    python -m pip install pycodestyle とか(pip install pycodestyleだとパスに他の pipがあると誤爆することがある)
  • VS-Codeで Pycodestyle を有効にして、pycodestyle の絶対パスを入れる
    image.png

4.b. pylint を有効にする

  • pylintをインストールする
    python -m pip install pylint とか
  • VS-Codeで Pylintを有効にして、pylint の絶対パスを入れる image.png
  • code で開くパス直下に .pylintrc を作る
    pylint --generate-rcfile > .pylintrc みたいに作れる

5. テストの設定

大雑把に次の違いがある。(VS-Codeだとどっちと相性が良いのか…)

  • unittest
    Python標準。良くも悪くもシンプルであり、失敗時のエラーは簡易。
  • pytest
    サードパーティー(MITライセンス)。歴史はある。失敗時のエラーが詳細に表示できる。

テスト対象のコード例: src/calc.py

"""Calc functions."""


def minus(op_a, op_b):
    """minus function."""
    if op_a < op_b:
        return 0
    return op_a - op_b

unittestの場合

次の設定をします。

  • python.testing.unittestEnabled ... チェックを入れる

テストコードの例

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Sample of unittest."""
import unittest
import calc


class TestCalc(unittest.TestCase):
    """Test calc module."""

    def test_calc_1(self):
        """test calc.minus."""
        ret = calc.minus(3, 1)
        assert ret == 1  # OK: ret == 2

    def test_calc_2(self):
        """test calc.minus."""
        ret = calc.minus(1, 2)
        assert ret == 0


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

# EOF

実行例
image.png

pytestの場合

次の設定をします。

  • python.testing.pytestEnabled ... チェックを入れる
  • python.testing.pytestPath ... 絶対パスを入れる

テストコードの例

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Sample of pytest."""
import calc


def test_calc_1():
    """test calc.minus."""
    ret = calc.minus(3, 1)
    assert ret == 1  # OK: ret == 2


def test_calc_2():
    """test calc.minus."""
    ret = calc.minus(1, 2)
    assert ret == 0

実行例

image.png
image.png

解説

pycodestyle / pylint

pyenvでインストールするとき、 .bashrc に pyenv のパスを追加して pyenv init - の結果を eval する。
pyenv init - で生成されるシェルスクリプトでは export PATH="$HOME/.pyenv/shims:${PATH}" あたりで pycodestylepylint のパスが追加される。
動的に追加されるパスなので VS-Code としては pycodestylepylint の格納場所を知りようがないから絶対パスが必要。

余談

pycodestyleから先に試していたら、英語で書いてある通りで full path を入れれば有効化されるので迷わなかった気がする。

参考

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1