検索
ホームページバックエンド開発Python チュートリアル完璧な Python プロジェクトを構築する
完璧な Python プロジェクトを構築するSep 29, 2020 pm 04:39 PM
Pythonプロジェクト

Python ビデオ チュートリアル コラムでは、完璧な Python プロジェクトを構築する方法を紹介します。

完璧な Python プロジェクトを構築する

#新しい Python プロジェクトを開始するときは、すぐにコーディングを開始するのが簡単です。実際、少し時間をかけて優れたライブラリを選択すると、将来の開発にかかる時間を大幅に節約でき、より快適なコーディング エクスペリエンスがもたらされます。

理想的な世界では、すべての開発者の関係は相互依存および関連しており (共同開発)、コードは完全にフォーマットされ、低レベルのエラーがなく、テストはすべてのコードをカバーする必要があります。さらに、これらすべてはコミットごとに保証されます。 (統一されたコードスタイル、型検出、高いテストカバレッジ、自動検出)

今回は、これらの点を実現できるプロジェクトの構築方法を紹介します。手順に従うことも、「Cookiecutter を使用してプロジェクトを構築する」セクション (経験豊富なユーザー向け) に直接ジャンプすることもできます。 まず、新しいプロジェクト ディレクトリを作成しましょう。

mkdir best_practices
cd best_practices复制代码

pipx Python サードパーティ ライブラリをインストールするコマンドライン ツール

Pipx は、Python サードパーティ ライブラリを迅速にインストールするために使用できるコマンドライン ツールです。 -パーティーライブラリ。これを使用して、pipenv と cookiecutter をインストールします。次のコマンドを使用して pipx をインストールします:

python3 -m pip install --user pipx
python3 -m pipx ensurepath复制代码

依存関係管理に Pipenv を使用する

Pipenv は、プロジェクトの virtualenv (仮想環境) を自動的に作成および管理し、パッケージをインストール/アンインストールします。 /Pipfile からパッケージを削除しています。また、依存関係の信頼性を確保するために非常に重要な Pipfile.lock も生成します。

あなたとチームメイトが同じバージョンのライブラリを使用していることが分かると、プログラミングへの自信と楽しさが大幅に高まります。 Pipenv は、同じライブラリを異なるバージョンで使用するという問題をうまく解決しており、過去に広く注目と認知度を高めてきたため、安心して使用できます。インストール コマンドは次のとおりです。

pipx install pipenv复制代码

コードの書式設定に black と isort を使用します

black でコードを書式設定できます:

Black は、妥協のない Python コードの書式設定ライブラリです。これを使用すると、コードの書式設定を手動で調整する詳細を省略できます。その代わりに、Black はスピードと確実性をもたらし、Python コーディング スタイルを調整する手間を省き、より重要なことに集中するためのより多くのエネルギーと時間を確保します。

読んでいるプロジェクトの種類に関係なく、黒でフォーマットされたコードは同じように見えます。しばらくすると、フォーマットの問題が少なくなり、コンテンツに集中できるようになります。

黒は、コードのばらつきを減らすことでコード検査を高速化します。

そして isor はインポート部分をソートします:

isor はインポートする Python パッケージ部分 (インポート) をソートします。そのため、インポートを行う必要はもうありません。手動ソート。インポートをアルファベット順に並べ替え、自動的に部分に分割できます。

デプロイメントが乱雑にならないように、pipenv を使用してインストールします (開発環境にのみインストールするように指定できます):

pipenv install black isort --dev复制代码

Black と isort はデフォルトと互換性がありませんオプションがあるので、isort を黒の原則に従うようにします。

setup.cfg ファイルを作成し、次の構成を追加します:

[isort]
multi_line_output=3
include_trailing_comma=True
force_grid_wrap=0
use_parentheses=True
line_length=88复制代码

次のコマンドを使用してこれらのツールを実行できます:

pipenv run black
pipenv run isort复制代码

コード スタイルを確保するために flake8 を使用します

Flake8 は、コードが PEP8 で定義された標準の Python コーディング規約に従っていることを保証します。 Pipenv を使用してインストールします:

pipenv install flake8 --dev复制代码

isort と同様に、黒で適切に動作するにはいくつかの設定が必要です。これらの設定を

setup.cfg に追加します。

[flake8]
ignore = E203, E266, E501, W503
max-line-length = 88
max-complexity = 18
select = B,C,E,F,W,T4复制代码

これで、コマンド

pipenv run flake8 を使用して flake8 を実行できるようになります。

mypy を使用した静的型チェック

Mypy は、Python の非強制静的型チェッカーであり、動的 (または「ダック」) 型付けと静的型付けの利点を組み合わせるように設計されています。 Mypy は、Python の表現力と利便性を強力な型システムのコンパイル時の型チェックと組み合わせ、本質的に実行時のオーバーヘッドなしで任意の Python VM を使用して実行します。

Python で型を使用するには少し慣れる必要がありますが、その利点は非常に大きいです。次のとおりです。

    #静的型付けにより、プログラムの理解と保守が容易になります。
  • 静的型付けにより、エラーを早期に発見し、テストとデバッグの時間を短縮できます
  • Static入力すると、コードが本番環境に入る前に見つけにくいエラーを見つけるのに役立ちます
  • pipenv install mypy --dev复制代码
デフォルトでは、Mypy はインポートされたすべてのパッケージの型注釈を再帰的にチェックし、ライブラリに型注釈が含まれていない場合には、注釈を追加すると、エラーが報告されます。コード上でのみ実行され、型アノテーションなしのインポート エラーを無視するように mypy を構成する必要があります。私たちのコードは、以下で構成された

best_practices パッケージ内にあると仮定します。これを setup.cfg に追加します:

[mypy]files=best_practices,testignore_missing_imports=true复制代码

これで、mypy を実行できるようになります:

pipenv run mypy复制代码

これは便利なチートシートです。

用 pytest 和 pytest-cov 进行测试

使用 pytest 编写测试非常容易,消除编写测试的阻力意味着可以快速的编写更多的测试!

pipenv install pytest pytest-cov --dev复制代码

这是 pytest 网站上的一个简单示例:

# content of test_sample.pydef inc(x):
    return x + 1def test_answer():
    assert inc(3) == 5复制代码

要执行它:

$ pipenv run pytest=========================== test session starts ============================
platform linux -- Python 3.x.y, pytest-5.x.y, py-1.x.y, pluggy-0.x.y
cachedir: $PYTHON_PREFIX/.pytest_cache
rootdir: $REGENDOC_TMPDIR
collected 1 item

test_sample.py F                                                     [100%]

================================= FAILURES =================================
_______________________________ test_answer ________________________________

    def test_answer():>       assert inc(3) == 5E       assert 4 == 5
E        +  where 4 = inc(3)

test_sample.py:6: AssertionError
========================= 1 failed in 0.12 seconds =========================复制代码

我们所有的测试代码都放在 test 目录中,因此请将此目录添加到 setup.cfg

[tool:pytest]
testpaths=test复制代码

如果还想查看测试覆盖率。创建一个新文件 .coveragerc,指定只返回我们的项目代码的覆盖率统计信息。比如示例的 best_practices 项目,设置如下:

[run]
source = best_practices

[report]
exclude_lines =
    # Have to re-enable the standard pragma
    pragma: no cover

    # Don't complain about missing debug-only code:
    def __repr__
    if self\.debug

    # Don't complain if tests don't hit defensive assertion code:
    raise AssertionError
    raise NotImplementedError

    # Don't complain if non-runnable code isn't run:
    if 0:
    if __name__ == .__main__.:复制代码

现在,我们就可以运行测试并查看覆盖率了。

pipenv run pytest --cov --cov-fail-under=100复制代码

--cov-fail-under=100 是设定项目的测试覆盖率如果小于 100% 那将认定为失败。

pre-commit 的 Git hooks

Git hooks 可让您在想要提交或推送时随时运行脚本。这使我们能够在每次提交/推送时,自动运行所有检测和测试。pre-commit 可轻松配置这些 hooks。

Git hook 脚本对于在提交代码审查之前,识别简单问题很有用。我们在每次提交时都将运行 hooks,以自动指出代码中的问题,例如缺少分号、尾随空白和调试语句。通过在 code review 之前指出这些问题,代码审查者可以专注于变更的代码内容,而不会浪费时间处理这些琐碎的样式问题。

在这里,我们将上述所有工具配置为在提交 Python 代码改动时执行(git commit),然后仅在推送时运行 pytest coverage(因为测试要在最后一步)。创建一个新文件 .pre-commit-config.yaml,配置如下:

repos:  - repo: local    hooks:      - id: isort        name: isort        stages: [commit]        language: system        entry: pipenv run isort        types: [python]      - id: black        name: black        stages: [commit]        language: system        entry: pipenv run black        types: [python]      - id: flake8        name: flake8        stages: [commit]        language: system        entry: pipenv run flake8        types: [python]        exclude: setup.py      - id: mypy        name: mypy        stages: [commit]        language: system        entry: pipenv run mypy        types: [python]        pass_filenames: false      - id: pytest        name: pytest        stages: [commit]        language: system        entry: pipenv run pytest        types: [python]      - id: pytest-cov        name: pytest        stages: [push]        language: system        entry: pipenv run pytest --cov --cov-fail-under=100        types: [python]        pass_filenames: false复制代码

如果需要跳过这些 hooks,可以运行 git commit --no-verifygit push --no-verify

使用 cookiecutter 生成项目

现在,我们已经知道了理想项目中包含了什么,我们可以将其转换为 模板 从而可以使用单个命令生成一个包含这些库和配置的新项目:

pipx run cookiecutter gh:sourcery-ai/python-best-practices-cookiecutter复制代码

填写项目名称和仓库名称,将为您生成新的项目。

要完成设置,请执行下列步骤:

# Enter project directorycd <repo_name># Initialise git repogit init# Install dependenciespipenv install --dev# Setup pre-commit and pre-push hookspipenv run pre-commit install -t pre-commit
pipenv run pre-commit install -t pre-push复制代码

模板项目包含一个非常简单的 Python 文件和测试,可以试用上面这些工具。在编写完代码觉得没问题后,就可以执行第一次 git commit,所有的 hooks 都将运行。

集成到编辑器

虽然在提交时知道项目的代码始终保持最高水准是件令人兴奋的事情。但如果在代码已全部修改完成之后(提交时),再发现有问题还是会让人很不爽。所以,实时暴露出问题要好得多。

在保存文件时,花一些时间确保代码编辑器运行这些命令。有及时的反馈,这意味着你可以在代码还有印象的时候能迅速解决引入的任何小问题。

我个人使用一些出色的 Vim 插件来完成此任务:

  • ale 实时运行 flake8 并在保存文件时运行 black、isort 和 mypy
  • 与 projectionist 集成的 vim-test 在文件保存上运行 pytest

欢迎热爱技术和开源的小伙伴加入 HG 推出的译文亦舞系列的翻译中来,可以留言告诉我们。

更多相关免费学习推荐:python视频教程

以上が完璧な Python プロジェクトを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はjuejinで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は?LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は?Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

HTMLを解析するために美しいスープを使用するにはどうすればよいですか?HTMLを解析するために美しいスープを使用するにはどうすればよいですか?Mar 10, 2025 pm 06:54 PM

この記事では、Pythonライブラリである美しいスープを使用してHTMLを解析する方法について説明します。 find()、find_all()、select()、およびget_text()などの一般的な方法は、データ抽出、多様なHTML構造とエラーの処理、および代替案(SEL

Pythonの数学モジュール:統計Pythonの数学モジュール:統計Mar 09, 2025 am 11:40 AM

Pythonの統計モジュールは、強力なデータ統計分析機能を提供して、生物統計やビジネス分析などのデータの全体的な特性を迅速に理解できるようにします。データポイントを1つずつ見る代わりに、平均や分散などの統計を見て、無視される可能性のある元のデータの傾向と機能を発見し、大きなデータセットをより簡単かつ効果的に比較してください。 このチュートリアルでは、平均を計算し、データセットの分散の程度を測定する方法を説明します。特に明記しない限り、このモジュールのすべての関数は、単に平均を合計するのではなく、平均()関数の計算をサポートします。 浮動小数点数も使用できます。 ランダムをインポートします インポート統計 fractiから

TensorflowまたはPytorchで深い学習を実行する方法は?TensorflowまたはPytorchで深い学習を実行する方法は?Mar 10, 2025 pm 06:52 PM

この記事では、深い学習のためにTensorflowとPytorchを比較しています。 関連する手順、データの準備、モデルの構築、トレーニング、評価、展開について詳しく説明しています。 特に計算グラップに関して、フレームワーク間の重要な違い

人気のあるPythonライブラリとその用途は何ですか?人気のあるPythonライブラリとその用途は何ですか?Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

Pythonでコマンドラインインターフェイス(CLI)を作成する方法は?Pythonでコマンドラインインターフェイス(CLI)を作成する方法は?Mar 10, 2025 pm 06:48 PM

この記事では、コマンドラインインターフェイス(CLI)の構築に関するPython開発者をガイドします。 Typer、Click、Argparseなどのライブラリを使用して、入力/出力の処理を強調し、CLIの使いやすさを改善するためのユーザーフレンドリーな設計パターンを促進することを詳述しています。

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は?あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は?Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

Pythonの仮想環境の目的を説明してください。Pythonの仮想環境の目的を説明してください。Mar 19, 2025 pm 02:27 PM

この記事では、Pythonにおける仮想環境の役割について説明し、プロジェクトの依存関係の管理と競合の回避に焦点を当てています。プロジェクト管理の改善と依存関係の問題を減らすための作成、アクティベーション、およびメリットを詳しく説明しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。