Visual Studioコードを使用したPython型チェック


チームで働くとき、コードのブロックを理解するのに必要なバグと時間の数を減らしている間、すべての開発者(古くて新しい)が生産的であることができるベストプラクティスのセットを確立することは重要です.
あなたが他の開発者と協力していて、機能署名と変数で明示的である必要があるならば、静的型付け言語を使用することはあなたのプロジェクトのための良い選択でありえます.Python 3以降では、静的な型を追加できますが、変数に不正な値を割り当てる場合は、IDEまたはコードエディターでエラーは表示されません.
このチュートリアルでは、Pythonを静的型付け言語のように動作させるように設定します.PythonプロジェクトのVSコードでチェックするリアルタイム静的タイプを設定します.私は、あなたのコードに変数または関数パラメータの型を明示的に追加するときに、セットアップがエラーを表示するのを好むことを好みます.

Venvの設定


Venvは、プロジェクトの依存関係を分離する仮想環境を作成するためのPythonビルトインツールです.

Windowsセットアップ


py -m venv venv

.\venv\Scripts\activate

LinuxまたはMacOSの設定


python3 -m venv venv

venv/bin/activate

mypyをインストール


次に、インストールMypy . このパッケージは、Pythonコード内の型をチェックし、必要に応じて一連の規則を定義します.

セットアップ


pip install mypy

GitLens拡張モジュールを追加する


インストールGitLens VSコードの拡張.
次に、これらの設定をローカルに追加しますsettings.json .
{
  "python.linting.mypyEnabled": true,
  "python.linting.mypyArgs": [
    "--ignore-missing-imports",
    "--follow-imports=silent",
    "--show-column-numbers",
    "--allow-untyped-defs",
    "--allow-subclassing-any",
    "--allow-untyped-calls",
    "--strict"
  ]
}
--strict : このオプションは厳密な型チェックを可能にします.しかし、それはいくつかのケースで厳格すぎることができます.既存のコードを持っている場合、それを変更する必要はありません.さらに、多くのエラーが開発者に気を散らすことができます.以下のフラグは、この厳格なモードをカスタマイズしてより厳しくします.--ignore-missing-imports : 未解決のインポートに関するエラーメッセージを抑制します.Jjangoでは、いくつかの輸入がこの旗なしで警告を上げることができます.プロジェクトが実際の問題ではないという警告を含んでいる場合のみ使用します.--follow-imports=silent : インポートされたモジュールで型チェックをオフにします.多くのライブラリは静的な型チェックを念頭に置いて開発されていなかったので、インポートされたモジュールで型チェックを抑制する方が良いです.--show-column-numbers : エラーメッセージの列番号を示します.--allow-untyped-defs : Pythonで型指定されていない関数がある場合はエラーを抑制します.--allow-subclassing-any : 任意の値をサブクラス化することを許可します.いくつかのフレームワークはこれらのエラーをmypyで投げることができます.--allow-untyped-calls : コード内で非型関数を呼び出すことができます.
このセットアップを使用してプロジェクトに徐々に追加することで問題はありません.MyPyには多くのオプションがあります.

最初の簡単な例


クリエイトアexample.py プロジェクトのルートで.
このコード(yo lo dejaria hasta aqui)をそのファイルに加えてください.
def sum(n1: int, n2: int) -> int:
    return n1 + n2


def sub(n1, n2):
    return n1-n2


result = sum(1, 2.5)
print(result)
result = sub(1, 2.5)
print(result)

下の画像で見ることができるので、多くのエラーが表示されますsum つのintパラメーターを期待しますが、float値が与えられます.しかしsub 型定義を欠いて、エラーは表示されません.

これは本当に強力です.エラーは、必要な関数と変数だけで表示され、既存のコードベースに干渉しません.

ジャンゴの例


Djangoプロジェクトを使用して、より複雑なシナリオを試してみましょう.Djangoは、Webアプリケーションを構築するためのフレームワークです.ドキュメントを見るhere . しかし、心配しないで、このセクションに従うことを知っている必要はありません.
Djangoが静的型付けのフレームワークでないことに注意してください.唯一の--strict モードsettings.json は多くのエラーをもたらすでしょう.設定した場合settings.json 前に述べたように、どんな問題も持ってはいけません.
新しいプロジェクトを作成するには、次の手順に従います.
    pip install django
    django-admin startproject myapp
    cd myapp
    py manage.py startapp clients
ではエラーを発生させるコードを追加しましょうclient.views.py
from django.http import JsonResponse
from django.shortcuts import render
from urllib.request import Request
from venv import create


def createGreeting(name: str) -> str:
    return f'Hello {name}!!!!'


def getPower(n):
    x = 42 == 'no'
    return n**2


def index(request):
    message = createGreeting(3, 'asdf')
    message = createGreeting(100)
    message: int = 'asdf'
    message: str = 1234
    n = getPower('asdf')
    return JsonResponse({'message': message})

多くのエラーにもかかわらずclients.urls.py , プロジェクトはまだ動いている.Djangoのインポートとデフォルトのコードは、変数と関数を手動で入力をチェックするので、罰金です.

結論


このチュートリアルでは、Visual Studioコードを構成して、Pythonプロジェクトの静的な型を確認し、開発中のエラーを表示する方法を学びました.
必要に応じて厳しくすることができますが、注意してください.以下に留意すべき事項の一覧を示します.
長所
  • チームで働くならば、コードの使用方法を理解するために、認知努力を減らします.
  • コード自体がドキュメント化されるため、生産性が向上します.
  • コードドキュメンテーションと読みやすさを改善します.
  • 冗長テストを減らす
  • 一定のリアルタイムフィードバック.
  • 開発エラーを減らす
  • それはカスタマイズ可能です.
  • 短所
  • プロジェクトの複雑さを増します.
  • 多くのPython開発者はコードを入力するのが好きではありません.
  • 関数がそれが何を言うかを返すことは確かである.
  • 設定が少ないほど、エラーが少なくなります.
  • それは徹底的にテストする必要があります新しいライブラリと複雑なモジュールを開発するために使用します.サードパーティライブラリやレガシーコードベース(厳密に必要でない限り)に静的型付けを追加しようとするのは、推奨されません.なぜなら、多くの問題と時間が費やされるかもしれないからです.書き込む新しいコードにフォーカスします.異なる設定で試してみてください.実行では、あなたとあなたのチームは、ワークフローにこのツールを組み込むことに感謝します.

    参考文献


    トゥシュル・サダーウィニ- 2021年
    Kracekumar - 2021年