※記事内に商品プロモーションを含むことがあります。
はじめに
Pythonでパッケージを構築するときのディレクトリ構成(フォルダ構成)をまとめました。
以下のようなパッケージを対象としています。
- 1個以上のモジュール(*.pyファイル)から構成される。
- テストを行う必要がある。
また、この記事ではデータ分析プロジェクトは対象外としています。
環境:Python 3.9.7
ディレクトリ構成
ディレクトリ構成の例を以下に示します。<my_project>
は任意のパッケージ名に変更します。
<my_project>/
<my_project>/
__init__.py
<my_project>.py
*.py
tests/
__init__.py
test_<my_project>.py
test_*.py
docs/
README.md
requirements.txt
setup.py
LICENSE
パッケージの実体
ルートフォルダの下に同じ名前のフォルダを作り、その中にパッケージの実体を置きます。Pythonにパッケージとして認識させるため、__init__.py
というファイルを置きます。また、パッケージをインポートしたときに、__init__.py
が実行されます。そのため、__init__.py
にはパッケージの初期化処理を書くことがあります。
__init__.py
の中身の書き方はいくつかありますが、ここではパッケージを柔軟に使える書き方を示します。例えば、my_package
という名前のパッケージにmy_package.py
とmy_module_0.py
というモジュールがある場合、以下のように書きます。
|
|
また、my_module_0.py
にmy_func()
という名前の関数が定義されているとします。このとき、パッケージの外部から以下3つの方法で呼び出せます(他にも呼び出し方はあります)。
例1
|
|
実体が1ファイルのみの場合
パッケージ内のファイルが1個だけの場合、以下のようにルートフォルダの直下に置くことができます。
<my_project>/
<my_project>.py
tests
tests
フォルダには、テストを行うためのスクリプトを置きます。テストを行うライブラリには、現在主流のpytestや、Python標準のunittestがあります。これらのライブラリの慣習または仕様として、テスト用スクリプトにtest_
から始まる名前を付けます。
docs
docs
フォルダには、パッケージに関するドキュメントを置きます。Sphinxを使ってdocstringから自動生成したドキュメントを置く運用方法もあるようです。
Sphinxの使用方法については以下の記事も参考にしてください。
SphinxでPython docstringからドキュメントを自動生成する – Helve Tech Blog
README.md
README.md
には以下のような情報を記載します。
- リポジトリの概要
- パッケージの使い方
- インストール方法
requirements.txt
パッケージの実行に必要なライブラリをrequirements.txt
に記述します。Pythonのパッケージ管理システムpipで以下のコマンドを実行することで、requirements.txt
を作成できます。
$ pip freeze > requirements.txt
別の環境でライブラリを一括でインストールするには、以下のコマンドを実行します。
$ pip install -r requirements.txt
setup.py
pipでパッケージをインストール可能とするためには、setup.py
を記述する必要があります。
LICENSE
LICENSE
ファイルにはソフトウェアのライセンス(MIT LicenseやApache Licenseなど)を、テキスト形式で記述します。慣習的に拡張子を付けないことも多いですが、WindowsやMac OSで開きやすいように、.txt
や.md
の拡張子を付けても問題ないと思います。
参考
- Structuring Your Project — The Hitchhiker’s Guide to Python
- pythonプロジェクトのディレクトリ推奨構成 - Qiita
- あとで後悔しないPythonのディレクトリ構成をつくってみる - Qiita
ディレクトリ構成のテンプレートを生成するcookiecutterというPythonライブラリもあります。