Scientific Python開発者ガイドに基づいた新しいPythonプロジェクト用のコピー機/Cookiecutterテンプレート。これをPythonパッケージの他のテンプレートと違うのは何ですか?
github.com URL(デフォルト)をターゲットにする場合はGitHubアクションをサポートし、それ以外の場合は実験的なGitLab CIサポートを追加します。sp-repo-reviewを提供します。すべてのチェックが架橋されています。 Scientific-Python Development Guideを最初に読んだことがあり、おそらく1つまたは2つのプロジェクトでそれらを使用したことを確認してください。これは最小限の例やチュートリアルではありません。 Cookeiecutterを使用して新しいプロジェクトを開始するか、既存のプロジェクトの個々のファイルにコピーするための有用なツールのコレクションです( {{cookiecutter.project_name}}/ )。
世代中に、パッケージの次のバックエンドから選択できます。
現在、最良の選択は、おそらく純粋なPythonプロジェクトのハッチであり、バイナリプロジェクトのScikit-Build(Scikit-Build-Core + Pybind11選択など)です。
copierとcopier-templates-extensionsをインストールします。 PIPXを使用して、それは次のとおりです。
pipx install copier
pipx inject copier copier-templates-extensions次に、コピー機を実行してプロジェクトを生成します。
copier copy gh:scientific-python/cookie < pkg > --trust ( <pkg>は新しいプロジェクトを配置するための道です。コピー機が古い場合は、 --UNSAFE --trustの代わりに使用します。
回答の検証でより良いCLI体験が得られます。また、 .copier-answers.ymlファイルを取得します。これにより、将来更新を実行できます。
注:add
--vcs-ref=HEADlatedバージョンの代わりに最新バージョンを取得します。ヘッドは常にテストに合格します(そして、CookeiCutterが使用するものです)。
Brewを使用する場合は、 brew install cookiecutterそれ以外の場合はpipx install cookiecutter (または以下のコマンドにpipx runをprependし、インストールをスキップします)。その後、実行:
cookiecutter gh:scientific-python/cookiecookecutter 2.2.3+を使用している場合、コピー機のようなオプションの素晴らしい説明が得られます!
Cruftを使用することもできます。Cruftは、Cookiecutterプロジェクトに機能を追加する能力を追加することもできます。 pipx install cruft pipx runインストールします。その後、実行:
cruft create gh:scientific-python/cookieキーセットアップファイル、 pyproject.toml 、および場合によってはsetup.cfgおよびsetup.py (pybind11の例)を確認してください。 README.mdを更新します。また、 docs/にドキュメントを更新して追加します。
いくつかの例の依存関係と3.9の最小Pythonバージョンがあります。実際に必要/必要なものに変更してください。また、小さなタイピングの例がある基本的なバックポート構造もあります。
[docs] extra[test]追加NOXでローカルでテストできます。
# See all commands
nox -l
# Run a specific check
nox -s "lint(scikit-build)"
# Run a noxfile command on the project noxfile
nox -s "nox(hatch)" -- docsローカルにnoxを持っていない場合は、 pipx run noxを使用できます。
Hypermodern-Pythonは、各機能の優れたドキュメントや使用されている同じツールの多くのような、多くの類似点をチェックする価値のあるもう1つのプロジェクトです。特徴のセットがわずかに異なり、GitHubアクションに焦点が合っています。ほとんどのガイドは、GHAを使用したくない場合は、別のCIシステムにかなり簡単に適応できます。また、詩の使用を強制します(バックエンドの選択をする代わりに)、コンパイルされたプロジェクトをサポートしていません。現在、すべての開発依存関係を共有環境に捨て、長い解決と紛争の可能性を高めています。また、使用することを意図した方法で事前にコミットすることも使用しません。また、かなりのカスタムコードがあります。
多くのガイド、cookecutter、およびrepo-reviewは、Scikit-hepの一部として始まりました。これらのプロジェクトは、2023年のScientific-Python Developers Summitで、NSLS-IIガイドと統合され、一般化され、組み合わされました。
sp-repo-review Repo-ReviewのScientific-Python/CookieのScientific-Python開発ガイドに基づいたチェックを提供します。
このツールは、リポジトリのスタイルを確認できます。このように使用:
pipx run ' sp-repo-review[cli] ' < path to repository >これにより、結果のリストが生成されます。グリーンチェックマークは、このルールが守られていることを意味し、Red Xはルールがそうではないことを意味します。黄色の警告サインは、以前の必要なチェックが失敗したため、小切手がスキップされたことを意味します。いくつかのチェックは失敗します、それは大丈夫です - 目標は、任意のチェックへの順守を強制することではなく、あなたの注意にすべての可能な問題をもたらすことです。最終的には、無視されているとチェックをマークする方法があるかもしれません。
たとえば、 GH101 、すべてのアクションファイルが素敵なname:フィールド。 CIで表示されているファイルベースの名前に満足している場合は、このチェックを単純に無視するだけでお気軽に注意する必要があります(今のところ視覚的に無視するだけで、無視されたチェックを指定する方法が最終的に追加される可能性があります)。
すべてのチェックは、少なくともScientific-Python Development Guideで何らかの形で言及されています。最初にそれを読む必要があります - あなたがそれらに従おうとしていない場合、いくつかのチェックは機能しないかもしれません。たとえば、ガイドラインでは、pytest構成がpyproject.tomlに配置されていることが指定されています。他の場所に配置すると、すべてのpytestチェックがスキップされます。
これはもともと、Scikit-hepのために科学的なPythonに移動する前に開発されました。
GitHubアクションを使用することもできます。
- uses : scientific-python/cookie@<version>または事前コミット:
- repo : https://github.com/scientific-python/cookie
rev : <version>
hooks :
- id : sp-repo-review additional_dependenciesを使用して、 validate-pyprojectなどのプラグインを追加する場合は、CLI要件が含まれていることを確認するために"repo-review[cli]"も含める必要があります。
PY001 :pyproject.tomlがありますPY002 :readme。(md | rst)ファイルがありますPY003 :ライセンス*ファイルがありますPY004 :ドキュメントフォルダーがありますPY005 :テストフォルダーがありますPY006 :事前コミット構成がありますPY007 :簡単なタスクランナー(NOX、TOX、PIXIなど)をサポートしていますPP002 :適切なビルドシステムテーブルがありますPP003 :ホイールをビルドデップとしてリストしませんPP004 :上限Pythonには必要ありませんPP301 :PyprojectにPytestがありますPP302 :最小値を少なくとも6に設定しますPP303 :テストパスを設定しますPP304 :ログレベルをPytestに設定しますPP305 :XFAIL_STRICTを指定しますPP306 :Strict Configを指定しますPP307 :厳密なマーカーを指定しますPP308 :便利なPytestの概要を指定しますPP309 :指定されたフィルター警告RTD100 :readthedocs(pyproject config)を使用しますRTD101 :RTDバージョン番号を2に設定する必要がありますRTD102 :RTDビルド画像を設定する必要がありますRTD103 :RTD Pythonバージョンを設定する必要がありますGH100 :githubアクション構成がありますGH101 :素敵な名前がありますGH102 :繰り返しPRSの自動キャンセルGH103 :手動ディスパッチトリガーを備えた少なくとも1つのワークフローGH104 :Upload-Artifactに一意の名前を使用しますGH200 :Dependabotによって維持されていますGH210 :DependAbotを使用してGitHubアクションバージョンを維持しますGH211 :コアアクションを主要なバージョンとして固定しないでくださいGH212 :GHAアップデートグループ化が必要ですMY100 :Mypy(Pyproject Config)を使用しますMY101 :Mypy StrictモードMY102 :mypy show_error_codesは非推奨ですMY103 :Mypyは到達不能に警告しますMY104 :MyPyはコードなしで無視できますMY105 :MyPyは冗長なExprを有効にしますMY106 :MypyはTruthy-Boolを有効にしますPC100 :コミット前のフックがありますPC110 :ブラックまたはラフ形式を使用しますPC111 :Blacken-Docsを使用しますPC140 :タイプチェッカーを使用しますPC160 :スペルチェッカーを使用しますPC170 :pygrepフックを使用します(最初の存在の場合にのみ必要です)PC180 :マークダウンフォーマッタを使用しますPC190 :Ruffを使用しますPC191 :修正が有効になった場合、Ruff Show Fixが修正されますPC901 :カスタム前委員会CIメッセージRF001 :Ruff ConfigがありますRF002 :ターゲットバージョンを設定する必要がありますRF003 :SRCディレクトリを指定する必要はもうありません(0.6+)RF101 :Bugbearを選択する必要がありますRF102 :ISORTを選択する必要がありますRF103 :pyupgradeを選択する必要がありますRF201 :非推奨設定の使用は避けてくださいRF202 :(new)Lint Configセクションを使用します