lisz-works

プログラミングと興味を貴方に

Python3 ディレクトリ構成と実行

【スポンサーリンク】

Python

こんにちわlisです!

Python3でプロジェクトのディレクトリ構成と実行についてです!

unittestを入れたくてtestsを入れたり、ソースをまとめたりしていたら

  • 参照がエラーする
  • うまく実行できなくなる

など、色々不都合が発生してしまいました……

そんな状況を打開すべく、ディレクトリ構成について調べて試しました!

プロジェクトのディレクトリ構成

ディレクトリ構成の正解は、このような構成でした。

― proj  
  ├― proj  
  │  ├― __init__.py  
  │  ├― __main__.py (アプリとして動作させる場合のmain)  
  │  └― *.py  
  └― tests  
    ├― __init__.py  
    └― *.py  

アプリとして実行するとき

mainを実行して、1つのアプリとしてプロジェクトを実行したい場合、

(プロジェクトのルートパスが、C:\work\projの場合)
> cd c:\work\proj
> python -m proj

と実行します。

python -mで指定している「proj」は、プロジェクトフォルダ内のprojフォルダになります。

― proj  
  ├― proj  ←これ  
  └― tests  

実行例

適当なプロジェクトの一例です。

ディレクトリ構成

C:\work\proj  
  ├― proj  
  |   ├― __init__.py  
  |   ├― __main__.py  
  |   └― sub.py  
  └― tests  
      ├― __init__.py  
      └― *.py  

sub.py

def hoge():
    print('hoge')

main.py

from . import sub

if __name__ == '__main__':
    sub.hoge()

実行

C:\work\proj> python -m proj
hoge

VSCodeで実行設定

project rootフォルダをVSCodeで開く。

どれでもいいので、Pythonのソースを開く。

サイドメニューから「実行」を開き、「launch.json ファイルを作成します。」というリンクテキストをクリック。

launch.jsonファイルを作成します

「Select a debug configuration」というのが上部に表示されます。

実行構成の種類を選ぶのですが、ここから「Module」を選択します。

Select a debug configurationでModuleを選択

「Debug Module」が出てきます。

ここでプロジェクト名を入力します。

Debug Moduleでプロジェクト名を入力

前述しましたが、具体的には「←ここ」のところです。

― proj  
  ├― proj   ←ここ  
  |   ├― __init__.py  
  |   ├― __main__.py  
  |   └― *.py  
  └― tests  
      ├― __init__.py  
      └― *.py  

これで「.vscode/launch.json」が自動生成されます。

中身はこんなでした。

{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: モジュール",
            "type": "python",
            "request": "launch",
            "module": "proj"
        }
    ]
}

実行(F5)してみると、ちゃんとmain.pyが動作した結果が表示されました。

参考

コチラを参考にしました。ありがとうございました!

qiita.com

note.nkmk.me

rinatz.github.io

あとがき

Python3のディレクトリ構成と実行でした!

今までふわっと適当にディレクトリ作ったり分けたりしていたので、今度からはちゃんとしようと心に決めました。