プロジェクト内で一連の Python スクリプトを作成しています。各スクリプトは、次のようにプロジェクトのサブディレクトリ内にあります。
projectroot
|
|- subproject1
| |
| |- script1.main.py
| `- script1.merger.py
|
|- subproject2
| |
| |- script2.main.py
| |- script2.matcher.py
| `- script2.merger.py
|
`- subproject3
|
|- script3.main.py
|- script3.converter.py
|- script3.matcher.py
`- script3.merger.py
現在、いくつかのスクリプトはいくつかのコードを共有しています。共有コードはプロジェクト自体の一部と見なすのが最善であり、個別にコンパイルしてライブラリを作成したり、サイト全体の PYTHONPATH にドロップしたりするものではありません。projectroot
そのコードを、ディレクトリ自体、またはprojectroot
呼び出されたcommon
(おそらく)の子ディレクトリなど、さまざまな場所に配置できます。
ただし、これまでに考えた方法のほとんどは、空の__init__.py
ファイルを使用してサブプロジェクトからパッケージを作成し、相対インポートを使用すること (またはすべてのサブプロジェクトで冗長にいじること) を伴いsys.path
ます。さらに悪いことに、この一連のスクリプトの実行を中心にパッケージ構造を構築するようです。拒否されたPEP-3122からの次の警告に違反しています。
注意!この PEP は拒否されました。Guido は、パッケージ内でスクリプトを実行することをアンチパターンと見なします。
パッケージ内のスクリプトがパターン化されていない場合、共通コードを同じプロジェクトに保持するように設定するにはどうすればよいですか? それとも、モジュールとパッケージベースのシステムはここで受け入れられますか? 最もクリーンなアプローチはどれですか? (FWIW 「実際の」サブプロジェクトの兄弟であるユーティリティディレクトリを作成するのではなく、プロジェクトのルートディレクトリにshared.py
またはなどのファイルを配置することをお勧めします。)common.py