2012-05-04 20 views
5

私の会社の中小のライブラリをいくつか書かなければならないとしましょう。Pythonライブラリを書く:構造、命名、およびインポートのベストプラクティス

それは、Javaのアプローチを使用するように、ニシキヘビの方法で、意味をなすと、このような次のような構造を実現するなど、一般的なハイレベルパッケージ(エヘン、モジュール)で、それらのすべてを接頭辞ん:

mycompany.mylibrary1.moduleA 
mycompany.mylibrary1.moduleB.moduleD 
mycompany.mylibrary2.moduleC 

それが進むべき道だ、私はほとんどの時間は、第二のアプローチが使用されていることがわかり、私は確認のために見ている(またはしない)して

mylibrary1.moduleA 
mylibrary1.moduleB.moduleD 
mylibrary2.moduleC 

:またはそれは単にのために行く方が良いです。

私は横に、PEP 008にこの点で何かを見つけることができませんでした:

Pythonのライブラリの命名規則は、混乱のビットですので、我々はこれが完全に一致を得ることは決してないだろう[...]

は、その後、我々は唯一のモジュールとクラスの命名適応症のほか、相対輸入に落胆しているという事実を取得します。

絶対輸入はあなたが本当に重要なあなたのライブラリを整理する方法の決定を行う行くための方法です(と私は相対的な輸入を回避することが良いか悪いかどうかを議論するためにここにいないよ)という事実。

私はすべてのライブラリのネームスペースを使用するJavaアプローチが好きですが、Python以外の印象を受けています...お勧めの方法は何ですか?

PS。 一般的に「ベストプラクティス」の質問は主観的なものであると考えられますが、PythonではPEPの存在が私の意見では非常に客観的です。答えは...ライブラリを整理するためのベストプラクティスではありません。

+1

会社の人々がライブラリを使用するつもりはありますか?もしそれらが内部的に使用されていれば、 'mycompany.mylibary1'はあなたが後で誰かの' mylibrary1'とトラブルに遭うことができないことを意味します。 –

答えて

5

Pythonのインポートと名前には認知的な問題があります。多くの異なる種類の1次オブジェクト(プリミティブ、モジュール、クラス、関数、モジュールであると思われるクラス、オブジェクトであると思われるモジュールなど)が存在するので、人々はドット表記法を使用して、外部ソースから到着しました。したがって

import foo.bar 
e = foo.bar.make_entity() 

from foo.bar import make_entity 
e = make_entity() 

より明確になるように感じられるが、これはあなたが頻繁にアクセスする必要のあるものは何でもの完全なパスを入力しなければならないことを意味します。 "com.example.some.lib.module.frobnicate()は素早く面倒になります。したがって、丁寧なライブラリはアクセスのための合理的に短い名前を提供します。

+0

thanks @Bittrance。これはありません。正式なベストプラクティスですが、名前空間全体を可能な限り短く保つ良い理由があります。 – Stefano

+0

あなたは正しかったです。規範的ではなく、私が見てきたことを説明しているはずです。 – Bittrance

関連する問題