品質開発のための最新のPythonセットアップ


この記事では、私の一般的なPython設定とは何かを示します.
目標は
  • 高品質標準コード
  • Python規格の尊重
  • 経験経験品質
  • セキュリティ
  • 再現性
  • では、
  • IDE
  • Pythonバージョン
  • パッケージと仮想環境
  • コードリンター/フォーマッタ
  • テストツール
  • ドキュメント
  • 前コミット
  • セキュリティ
  • これは完全に主観的です.

    IDE : vscode
    vscodeはPythonプログラミングのための素晴らしいIDEです.
    彼の最も良い特徴の1つは拡張機能ですが、彼の拡張性です.
    以下にいくつかの拡張モジュールを使用します.
    一般開発環境
  • リモートコンテナ:Dockerコンテナ内の任意のフォルダーまたはリポジトリを開き、Visual Studioの完全な機能セットを利用します.グレートは、チームを介してすべてのdev環境を確保するために同一です.
  • Python : Python IntelliSense ( Pylance )、リンギング、デバッグ(マルチスレッド、リモート)、Jupyterノートブック、コード整形、リファクタリング、単体テストなど.私はJupyterを使用しないので、私はそれについて話を傾けます.しかし、Pylanceは素晴らしいツールです.フードの下で、それは超高速コードアナライザー(Mypyより速い方法)です.これを設定に忘れないでください.
  • VSCodeアイコン:各フォルダのタイプは、彼自身のよくデザインのアイコンを持っている.多くのファイルによる大きなプロジェクトは、それでより理解しやすい方法です.
  • ウィンドウの色:自動的に各ウィンドウのActivityBarとTitleBarにユニークな色を追加します.プロジェクトは、常に同じ色を持ちます.偉大なチームが複数のプロジェクトで動作すると、誰もが同じ色を参照してください.
  • GitLens :今、あなたは誰がコードに直接書いたかを見ることができます
  • データ解析/書式設定/変換のために.
    あなたのユースケース(Docker、Helmなど)に応じて拡張機能がたくさんあります
    私は、これらのものがほとんどあらゆるプロジェクトによって必要とされると思います:
  • ベタートムラー
  • 変化事件
  • コードスペルチェッカー
  • JSONツール
  • XMLツール
  • ヤル
  • VSCODE - Base 64
  • ソートJSONオブジェクト

  • Pythonのバージョン: Pyenv
    Pyenv これまでのところ、最高のPythonのバージョンマネージャです.

    PythonパッケージとVenv :詩
    Poetry Pythonでの依存性管理とパッケージングのためのツールです.プロジェクトが依存するライブラリを宣言することができます.
    基本的に、それはステロイドの下のpipです.これは、最新のパッケージファイル形式PyProjectで動作します.TOML彼の依存関係とビルドシステムは非常に信頼性が高い.あなたはまだ要件をエクスポートすることができます.必要であればtxt.仮想環境は魅力のように動作します.複数のPythonのバージョンも.それは多くの痛み点を解決します.これは必要があります.

    コードリンター/フォーマッタ

  • flake8 :Flake8 これらのツールのラッパです.
    ピケケーキ
    PyCodeStyle
    Ned BatchelderのMcCabeスクリプト
  • Flek 8は、単一のFlek 8コマンドを起動することにより、すべてのツールを実行します.これは、ファイルあたりの警告、マージされた出力を表示します.

  • ブラックBlack は妥協しないPythonコードフォーマッタです.それを使用することで、手の書式設定のminutiae以上の制御を拒否することに同意します.その代わりに、ブラックはあなたに、速度、決定論、および自由にPyCodeStyleからの自由をフォーマットについて話します.あなたはより重要な事柄のための時間と精神的なエネルギーを節約します.
  • ブラックニングコードは、あなたが読んでいるプロジェクトにかかわらず同じに見えます.フォーマットはしばらくして透明になり、代わりにコンテンツに集中できます.
    ブラックは、最小の差分を可能にすることによってコードレビューをより速くします.

  • ISort :isort 輸入品なので、必要ありません.

  • テストのために
  • PyTest : Pythonは直接的にUnittestを使うよりもコードを少なく書くことができます.良いライブラリの多くは非常によく処理します.いくつかのライブラリは、さらに効率的で、ユーザーフレンドリー(PyTestモック、PyTest Freezgun、PyTestシュガー)に拡張する
  • TOX : TOXの最初のポイントはテストを複数の環境(複数のPythonバージョン)に実行することです.私はそれの大ファンではありません、しかし、それは仕事をします.the nox 現代の代替手段ですが、私はそれを試してみる時間がなかった.

  • ドキュメントのために
    スフィンクスは、RSTやマークダウン形式を使用してドキュメントを書くことができます.テーマ管理と自動コードの内省はそれのいくつかの大きな特徴です.あなたのドキュメントをCI/CDパイプラインに簡単に統合できます.

    前コミット
    これは必要があります.pre-commit あなたのコミット検証の前に複数のスクリプトを実行することができます.ビルトイン前コミットの大きなカタログがあります.いくつかのファイルを変更します.警告やエラーを返すこともあります.何かをコミットする前に自動的にテスト/検証のトンを実行することができます.
    これは基本的には、実際の1つ前のローカルCIパイプラインです.
    ここに一つの例があります.事前コミット設定.YAML設定ファイルを使用します.
  • 自動的にインポートをソート
  • 黒はコードをフォーマットします
  • flake8スタイルの問題について警告します
  • 検証します.Gitlab CIYAML私の企業のgitlabサーバーに対して.
  • スクリプトのチェックスタイル
  • そして、より多く...
  • repos:
      - repo: https://github.com/pre-commit/pre-commit-hooks
        rev: v4.0.1
        hooks:
          - id: check-added-large-files
          - id: check-ast
          - id: check-builtin-literals
          - id: check-case-conflict
          - id: check-docstring-first
          - id: check-executables-have-shebangs
          - id: check-json
          - id: check-merge-conflict
          - id: check-symlinks
          - id: check-toml
          - id: check-vcs-permalinks
          - id: check-xml
          - id: check-yaml
            args: [--allow-multiple-documents]
          - id: debug-statements
          - id: detect-aws-credentials
            args: [--allow-missing-credentials]
          - id: destroyed-symlinks
          - id: end-of-file-fixer
          - id: fix-byte-order-marker
          - id: fix-encoding-pragma
            args: [--remove]
          - id: forbid-new-submodules
          - id: mixed-line-ending
            args: [--fix=auto]
          - id: name-tests-test
            args: [--django]
          - id: requirements-txt-fixer
          - id: trailing-whitespace
      - repo: local
        hooks:
          - id: black
            name: black
            entry: poetry run black
            language: system
            types: [python]
          - id: flake8
            name: flake8
            entry: poetry run flake8
            language: system
            types: [python]
      - repo: https://github.com/pycqa/isort
        rev: "5.9.1"
        hooks:
          - id: isort
            args:
              - --profile
              - black
              - --filter-files
      - repo: https://github.com/adrienverge/yamllint.git
        rev: v1.26.1
        hooks:
          - id: yamllint
            args: [-c=.yamllint.yaml]
      - repo: https://gitlab.com/devopshq/gitlab-ci-linter
        rev: v1.0.2
        hooks:
          - id: gitlab-ci-linter
            args:
              - "--server"
              - "https://your.gitlab.server" # Need env var GITLAB_PRIVATE_TOKEN with gitlab api read token
      - repo: https://github.com/commitizen-tools/commitizen
        rev: v2.17.11
        hooks:
          - id: commitizen
            stages: [commit-msg]
      - repo: https://github.com/jumanjihouse/pre-commit-hooks
        rev: 2.1.5 # or specific git tag
        hooks:
          - id: forbid-binary
          - id: shellcheck
          - id: shfmt
    

    セキュリティ

  • バンディットBandit Pythonコードで一般的なセキュリティ問題を見つけるように設計されたツールです.
  • このBanditは各ファイルを処理し、ASTをビルドし、ASTノードに対して適切なプラグインを実行します.一旦Banditがレポートを生成するすべてのファイルをスキャンし終えたならば.

  • 安全性Safety 既知のセキュリティ脆弱性に対するインストール依存関係をチェックします.
  • デフォルトでは、オープンPythonの脆弱性データベースセーフティDBを使用していますが、pyupを使用するようにアップグレードできます.キーオプションを使用してIOの安全性API.

  • gitleakGitleaks git reposのパスワード、APIキー、トークンのようなハードコードされた秘密を検出し防止するためのサストツールです.GitLevelsはあなたのコードで、過去、または現在の秘密を検出するための使いやすい、オールインワンソリューションです.

  • 何を変えるか
    私は大ファンではありません.
  • トックス
  • スフィンクス
  • 仕事はされます、しかし、誰かがより良い選択肢を持っているならば、私は彼らをためします.

    結論
    あなたがこの記事で1つか2つのものを借りることを望みます.
    これらのツールを使用すると、いくつかの一般的な落とし穴で落ちるのを助けることができます.
    Pylance警告&エラーは素晴らしいベストプラクティスの先生です.あなたのコードの理解と品質が大幅に理解し、それらを修正進行します.