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 は、Python の非強制静的型チェッカーであり、動的 (または「ダック」) 型付けと静的型付けの利点を組み合わせるように設計されています。 Mypy は、Python の表現力と利便性を強力な型システムのコンパイル時の型チェックと組み合わせ、本質的に実行時のオーバーヘッドなしで任意の Python VM を使用して実行します。Python で型を使用するには少し慣れる必要がありますが、その利点は非常に大きいです。次のとおりです。
- #静的型付けにより、プログラムの理解と保守が容易になります。
- 静的型付けにより、エラーを早期に発見し、テストとデバッグの時間を短縮できます
- Static入力すると、コードが本番環境に入る前に見つけにくいエラーを見つけるのに役立ちます
pipenv install mypy --dev复制代码
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-verify
或 git 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 サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

ホットトピック



