2 src layout vs flat layout
src layoutと flat layout
▶ Key Takeaways
src/
以下にImport Packagesを配置するsrc layoutが一般的に推奨されている- 個人用 or クイックにプロトタイプを作成したい場合はflat layoutを利用しても良いと思いますが,パッケージ周りの利点を考えると基本としてはsrc layoutの利用が推奨されます
- Import Package(
package_layout_test
)をsrc/
以下の格納するスタイル
.
├── README.md
├── pyproject.toml
├── poetry.lock
├── src/
│ └── package_layout_test/
│ ├── __init__.py
│ └── module.py
└── tests/
└── check_instance_setup.py
Poetryで用いて開発する場合は,以下のように
packages = [{ include = "*", from = "src" }]
を指定することで開発中のPATH及びImport Packageを明示するようにしています.
pyproject.toml
[tool.poetry]
name = "package-layout-test"
version = "0.1.0"
description = "for package install test"
authors = ["RyoNak <nakagamiryo0901@gmail.com>"]
license = "MIT"
readme = "README.md"
packages = [{ include = "*", from = "src" }]
package-mode = true
- Import Packageや設定ファイルをすべてプロジェクトのルート直下に配置するスタイル
.
├── README.md
├── pyproject.toml
├── poetry.lock
├── package_layout_test/
│ ├── __init__.py
│ └── module.py
└── tests/
└── check_instance_setup.py
Poetryで用いて開発する場合は,以下のように
packages = [{ include = "package_layout_test"}]
を指定することで開発中のPATH及びImport Packageを明示するようにしています.
pyproject.toml
[tool.poetry]
name = "package-layout-test"
version = "0.1.0"
description = "for package install test"
authors = ["RyoNak <nakagamiryo0901@gmail.com>"]
license = "MIT"
readme = "README.md"
packages = [{ include = "package_layout_test"}]
package-mode = true
layout構成の違いに起因する挙動の差
▶ Comparison
src layout | flat layout | |
---|---|---|
コードの動作確認 | install時にコードが動作するかどうか確認が入る | install時に動作確認されない |
Import挙動 | installされたパッケージの使用を保証する | ビルド時に誤って開発中のコードが混入される可能性がある |
メンテナンス性 | 設定ファイルとパッケージソースコードの階層が異なり管理しやすい | プロジェクトが大きくなるにつれて,構成が複雑になる傾向がある.設定ファイルとの区別が分かりづらくなる |
▶ コードの動作確認
- ビルドに成功したとしても,実際にインストール可能であるとは限らない
- PyPIなどでパッケージ公開したときに,モジュール不足や依存関係が壊れたディストリビューションをアップロードしてしまうリスクがある