2012-05-04 51 views
5

比方說,我必須寫幾個小到爲我公司媒體庫。編寫Python庫:結構,命名和導入的最佳實踐

是否有意義,在Python的方式,使用Java方法和前綴他們都具有一個共同的高級封裝(啊哈,模塊)如實現以下結構:

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

還是更簡單地去爲:

mylibrary1.moduleA 
mylibrary1.moduleB.moduleD 
mylibrary2.moduleC 

我看到大部分的時間使用第2個方法,但我一直在尋找一個確認(或不),這是要走的路。

PEP 008我找不到這方面的東西,旁邊:

Python的庫的命名約定是有點亂,所以我們永遠不會得到這個完全一致的[...]

,然後我們得到的只是模塊和類命名的指示,以及該相對進口望而卻步的事實。

事實上,絕對進口是決定如何組織你的庫真的很重要(我不是在這裏討論是否避免相對進口是好是壞)。

我做這樣的命名空間,所有的庫的Java的方法,但在我的印象它不是Python的...有什麼建議的路要走?

PS。 儘管總體上'最佳實踐'的問題被認爲是SO的主觀問題,但在Python中,PEP的存在使得它們在我看來非常客觀!儘管答案可能是...有沒有最好的做法,適合舉辦庫..

+1

你有沒有打算讓公司外部的人來使用的庫嗎?如果你這樣做,它更簡單,使他們'mylibrary1'。如果他們純粹是爲了內部使用,'mycompany.mylibary1'意味着你以後不能再碰上別人的'mylibrary1'麻煩。 –

回答

5

有使用Python進口和名稱的認知問題。由於有許多不同種類的一階對象(基元,模塊,類,函數,假裝爲模塊的類,假裝爲對象的模塊等),人們傾向於使用點符號來指示實體具有「抵達「來自外部來源。因此

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

感到更清晰比

from foo.bar import make_entity 
e = make_entity() 

然而,這意味着你會經常要鍵入任何你需要訪問的完整路徑。 「com.example.some.lib.module.frobnicate()得到討厭快。因此,禮貌庫的訪問提供了一個相當短的名字。

+0

感謝@Bittrance。這不是完全是一個官方的最佳實踐,但一個很好的理由,以保持整個命名空間儘可能的短。 – Stefano

+0

你是絕對正確的。我應該更明確一點,我描述我所觀察到的東西,而不是試圖去規範性。 – Bittrance