Pythonパッケージ構造#

このセクションでは、Python パッケージの構造、コードフォーマット、スタイルに関するガイダンスを提供します。また、Pythonパッケージの buildpublish に使える様々な packaging tools もレビューしています。

チュートリアルが必要な場合は、 Python パッケージとは 何かを紹介するところから始まるチュートリアルシリーズをご覧ください。

Python のパッケージングに戸惑っているのはあなただけではありません! 良いニュースは、あなたがベストプラクティスに従っていることを保証する、いくつかの素晴らしい最新のパッケージングツールがあるということです。 ここでは、ツールの機能をレビューし、あなたのワークフローに最適なツールを提案します。

Pythonパッケージ作成チュートリアルをご覧ください。

このコンテンツの開発方法

このガイドの内容はすべて、コアパッケージングツールのメンテナや開発者を含むコミュニティメンバーによって吟味されています。

✨ 1. パッケージのファイル構成 ✨

src レイアウト、フラットレイアウト、テストフォルダはどこに置くべきか? あなたのパッケージング知識のレベルに関係なく、このページは最新のpythonのベストプラクティスに従ったパッケージ構造を決める助けになるでしょう。

科学的PythonプロジェクトのためのPythonパッケージ構造
✨ 2. パッケージの構築について学ぶ✨

PythonパッケージをPyPIで公開するには、まずビルドする必要があります。 "ビルド" とは、パッケージのコードとメタデータをPyPIで公開できるような形式にすることです。 Pythonパッケージのビルドについての詳細はこちらをご覧ください。

科学的PythonプロジェクトのためのPythonパッケージ構造
✨ 4. メタデータを追加する ✨

Python パッケージにプロジェクトのメタデータを追加して、PyPI でのフィルタリングと、パッケージインストーラがパッケージをビルドしてインストールするために必要なメタデータの両方をサポートする方法を学びましょう。

パッケージの設定とメタデータにはpyproject.tomlファイルを使用します。
✨ 3. どのPythonパッケージツールを使うべきですか? ✨

パッケージングツール群についてもっと知りましょう。そして、どのツールがあなたに最適かを学びましょう。

Pythonパッケージングツール
✨ 4. PyPIとCondaに公開する ✨

純粋なPythonパッケージであれば、PyPIとconda-forgeのようなCondaチャネルの両方に公開するのは簡単です。 詳しくはこちら。

Pythonパッケージングツール
✨ 5. パッケージのバージョニングを設定する ✨

Semver (数値によるバージョン管理) と Calver (日付によるバージョン管理) は、パッケージをバージョン管理する2つの一般的な方法です。 どちらを選ぶべきでしょうか? 詳しくはこちら。

Pythonパッケージの新しいバージョンを作成する
✨6. コードスタイルとリンター✨

Black、blue、flake8、Ruff - あなたのパッケージがコードフォーマットのベストプラクティスに従っていることを確認するのに役立つツールはどれですか? オプションの詳細と、なぜこれが重要なのかについては、こちらをご覧ください。

Pythonパッケージコードのスタイル、フォーマット、リンター
様々なパッケージングツールのフロントエンドとバックエンドのオプションの決定ツリーを示す図。

選択可能な様々なフロントエンドビルドツールを示す図。 各ツールの詳細については、パッケージングツールのページを参照してください。#

注釈

査読にパッケージを投稿しようと考えているなら、査読が始まる前にpyOpenSciが行う最低限の editor checks を見てください。これらのチェックは、私たちにパッケージをレビューのために提出しようと計画している作者と、Pythonパッケージを作成し始めたばかりの人の両方にとって、調べるのに便利です。

ここで学べること#

Pythonパッケージングガイドのこのセクションでは、以下のことを説明します:

  • コードをパッケージングする際に利用可能なオプションの概要を説明します。

  • ニーズを満たし、かつ既存の基準をサポートするツールやアプローチを提案します。

  • 純粋なPythonツールから始まり、パッケージングビルドに複雑なレイヤーを追加する必要のあるコードへと進化するワークフローを拡張することを可能にするコードやアプローチを提案します。

  • 私たちの提案を、現在受け入れられている PEPs (Python Enhancement Protocols)Scientific Python community SPECs に合わせます。

  • 私たちのコミュニティ内での一貫性を維持するために、NumpyやSciPyなどのScientific Pythonのコアパッケージの開発者によって実装されている既存のベストプラクティスとも連携しています。

pyOpenSciのパッケージング推奨のガイドライン#

Pythonプログラミング言語の柔軟性は、Pythonパッケージを作成するための多様なツールオプションに適しています。Pythonはとても柔軟で、他の言語を包み込むように使える数少ない言語のひとつです。Pythonが他の言語をラッピングする能力は、Pythonが "glue" language" と表現されるのをよく耳にする理由の1つです。

純粋なPythonパッケージを構築するのであれば、パッケージングのセットアップは単純でよいです。しかし、科学的なパッケージの中には、CやC++のような他の言語で書かれた拡張機能やツールをサポートする必要があり、複雑な要件を持つものがあります。

Python の様々な使い方をサポートするために、Python パッケージを作成する方法はたくさんあります。 このガイドでは、パッケージングのアプローチとツールを提案します:

  1. パッケージングに慣れていない人たちにとって、私たちが最善で最も採用しやすいと考えるもの。

  2. よく整備され、文書化されていると思われるツール。

  3. この (科学的な) Pythonエコシステム全体でパッケージングアプローチを標準化するという共通の目標。

ここでは、私たちの提案を、最新の、受け入れられている Pythonコミュニティ科学コミュニティ に合わせることも試みています。

このガイドの提案はpyOpenSciのレビュー要件ではありません

このセクションのパッケージレイアウトの提案は、参考になることを意図しています。 これらは、あなたのパッケージがpyOpenSciオープンソースエコシステムにレビューされ、受け入れられるための特定の要件ではありません。

pyOpenSciのPythonパッケージ審査要件をお探しの方は、 package scope pagereview requirements in our author guide をご覧ください!