単一のファイルに存在するuseful_thing
と呼ばれる便利なpython関数またはクラス(または何でも))があるとします。ソースツリーを編成するには、本質的に2つの方法があります。単一のモジュール:
- setup.py
- README.rst
- ...etc...
- foo.py
ここで、useful_thing
はfoo.py
で定義されています。 2番目の戦略は、パッケージを作成することです。
- setup.py
- README.rst
- ...etc...
- foo
|-module.py
|-__init__.py
ここで、useful_thing
はmodule.py
で定義されています。パッケージの場合、__init__.py
は次のようになります。
from foo.module import useful_thing
どちらの場合でもfrom foo import useful_thing
を実行できます。
質問:どちらの方法が推奨されますか、それはなぜですか?
編集:ユーザーgnatはこの質問の形式が悪いと言っているので、公式のpythonパッケージングチュートリアルでは、上記の方法のどれが好ましい方法であるかについてコメントしていないようです。私は明示的にnot長所と短所の個人的なリストを提供する私は、コミュニティが好む方法があるかどうかに興味があるので、長所/短所の議論を生成しない:)
あなたはあなたのために働く最も単純なことをします。
1つの汎用モジュールの場合、パッケージを作成してもまったく意味がありません。パッケージは、追加の名前空間の作成や、複数のモジュールにまたがるコードの編成に役立ちます。
Python標準ライブラリのjson
およびunittest
モジュールは、たとえばコード編成の目的で実際にパッケージです。しかし、現在のコードをそのままにしておくのはまったく問題ありません。 1つのpythonファイル、1つのモジュールとして。
例が必要な場合:
six
は単に 1つのモジュール の分布ですsetuptools_Subversion
、 formatflowed
、 rtfunicode
。パッケージを本当にうまく活用しているプロジェクトの良い例については、以下を見てください。
「公式」の勧告はありません。どちらのオプションも完全に有効です。