単一のpythonファイル配布:モジュールまたはパッケージ?


24

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パッケージチュートリアルでは、上記のどの方法が推奨されるかについてコメントしていないようです。私は、賛否両論の議論を生成するのではなく、コミュニティが好む方法があるかどうかに興味があるので、私は賛否両論の個人的なリストを明示的に与えていません


あなたの研究を共有することは皆を助けます。試したことと、それがニーズに合わなかった理由を教えてください。これは、あなたが時間をかけて自分自身を助けようとしていること、明白な答えを繰り返すことから私たちを救うこと、そして何よりもあなたがより具体的で関連性のある答えを得ることを助けることを示しています。参照してください掲載する方法
GNAT

1
@gnat:質問方法へのリンクをありがとう。私は練習を求める良い質問を知っていますが、この場合、明確な「AまたはB」の質問として私が尋ねたことを意見募集に変える可能性が高いため、私の経験を与えることは適切ではないと思いました。意見に基づくことなく、この質問改善することをどのようにお勧めしますか?
ダニエルサンク14年

@gnat:言い換えると、2つの方法の長所/短所のリストに興味がある場合、「これら2つの方法の長所と短所は何か」と尋ね、自分の部分的なリストを含めます。
ダニエルサンク14年

回答:


17

あなたはあなたのために働く最も簡単なことをします

以下のために一つの機能モジュール、絶対にパッケージを作成するにはポイントがありません。パッケージは、追加の名前空間を作成したり、複数のモジュールにわたってコードを整理したりするのに役立ちます。

jsonそしてunittestPythonの標準ライブラリ内のモジュールのコードの組織のために、本当に例えばパッケージです。しかし、1つのモジュールとして、現在1つのpythonファイルにコードを残しておくことはまったく問題ありません。

例が必要な場合:

パッケージを実際に活用するプロジェクトの良い例については、以下をご覧ください。

「公式」の推奨事項はありません。両方のオプションは完全に有効です。


公式に推奨される方法はありませんか?
ダニエルサンク14年

3
いいえ、推奨される方法はありません。
マーティンピーターズ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.