Python のプロジェクトにおけるディレクトリ構成とその実行

Python っていろんな作法があるのね~

プロジェクトにおけるディレクトリ構成

時々 Python なんかを触って適当に作ったスクリプトなんかを GitHub にあげたり、または他人のリポジトリを眺めたりしている。そうすると気になってくることが一つ。

お決まりのディレクトリ構成みたいなものとかあるの?

作法があるならそれに則った方が自分にとっても他人にとってもいいような気がするから調べてみた。すると、以下のようなページが。

rinatz.github.io

このページによると、プロジェクトにおけるソースコードはもう一つプロジェクト名と同じディレクトリを作ってその中に __main__.py なるファイルを置いて書いていくものらしい。また、実行時は -m オプションを使って python -m <project> のようにして実行する、とのこと。

なるほど、ならばと自分の作った適当なスクリプトやらもこの形に合わせようと、ディレクトリ構成を考えてみた。自分の場合はだいたい個人開発なので以下のようなディレクトリ構成で十分だろうと思った。

親の myproject へのパスを通すとどこからでも実行できて便利!……と思いきや実行できずにエラーが返ってくる(エラー省略)。エラーを見るとそのようなパッケージはない、とのこと。その後もいろいろ調べたり試したがなかなかうまくいかない。さて、これはどうしたものか。

解決策

今まで PATH ばっかり見ていたからどうしようもなかったが、どうやら PYTHONPATH なる環境変数をいじればいいらしい。具体的に言うと、~/.bashrc

export PYTHONPATH=$PYTHONPATH:/path/to/myproject/

を追記し、source ~/.bashrc で読み込めば OK というわけである。これでどこからでも python3 -m myproject で実行できる。

ちなみに、もっとコマンドを短縮させたい場合は ~/.bashrcエイリアスを設定するといい。

alias myproject='python3 -m myproject'

こうすることで myproject コマンドだけで実行できるようになる。

おまけ

ディレクトリとか作るのめんどいなぁという人は以下の記事参照。

koi-7.hatenablog.jp