pythonで作るときのディレクトリ構成

pythonでのディレクトリ構成はimport周りがからんでくるため、かなり重要。

今更になって混乱してきたのでまとめとく。なおtestにはpytestを使用している。

パッケージ作るとき

パッケージ作るならさほど迷うことなくこうする。

project
├── mypkg
│   ├── __init__.py
│   ├── *.py
│   └── libs
│       ├── *.py
│       └── __init__.py
├── tests
│   ├── __init__.py
│   ├── test_*.py
│   └── test_sub
│       ├── __init__.py
│       └── test_*.py
├── docs
├── setup.py
└── requirements.txt

mypkgの中でのimportはすべて相対importで記述。

パッケージを実行したいときはrootでpython -m mypkg.~~~ という感じで。

テスト時もrootでpytestコマンドでいける。

アプリケーション作るとき

要はそのまま実行ファイル的に使うものを作るとき。これが迷った。とりあえず今の結論はこう。

project
├── myapp
│   ├── __init__.py
│   ├── __main__.py
│   ├── app.py
│   └── libs
│       ├── *.py
│       └── __init__.py
├── tests
│   ├── __init__.py
│   ├── test_*.py
│   └── test_sub
│       ├── __init__.py
│       └── test_*.py
├── docs
└── requirements.txt

app.pyの main()にでも実行コードを詰め込み、__main__.pyの中身はこうしておく

from app import main

if __name__ == "__main__":
    app.main()

importは__main__.py以外ではすべて相対importを使う。

実行時はrootでpython myappで実行、テストもrootでpytestコマンドで。

正解かどうかは知らないけどいまのところ不自由はない。

python

Posted by gran-gran-gran