2009-08-23 64 views
4

我正在開發一個Python應用程序;它的所有代碼都放在一個包裏面,當然在裏面運行。應用程序的Python包對於用戶來說是口譯員不感興趣的,它只是一個GUI應用程序。我應該使用「從包導入使用情況,設置」或「從。導入使用情況,設置」

的問題是,其風格是優選的,應用程序包內導入模塊時

from application import settings, utils 

from . import settings, utils 

也就是說,因爲它是(此處「應用」我可以指定的名稱)或者我可以用「。」來表示「當前包」。

這是一個免費的軟件包,所以有人想讓我的應用程序分叉並更改它的名字。在這種情況下,替代方案1是一種輕微的麻煩。儘管如此,我始終使用樣式1(儘管早期代碼在某些地方使用樣式2),因爲樣式1看起來好多了。

是否有我的風格(1)我錯過了任何論點?或者不喜歡風格2,這太愚蠢了嗎?

回答

10

Python Style Guide建議明確對相對進口(風格):

的封裝內進口相對進口高度氣餒。 始終對所有導入使用絕對包路徑。 即使現在PEP 328 [7]已經在Python 2.5, 中完全實現,其顯式相對導入的風格也被阻止; 絕對導入更便攜,通常更具可讀性。

我傾向於同意。相對導入意味着相同的模塊在不同的文件中以不同的方式導入,並且要求我記住閱讀和編寫時所看到的內容。不值得,可以用sed進行重命名。

除了重命名的問題,絕對導入的唯一問題是import foo可能意味着當前模塊下面的頂級模塊foo或子模塊foo。如果這是一個問題,您可以使用from __future__ import absolute_import;這在Python 3中是標準的。

+0

我對絕對/相對感到困惑。我的意思是,沒有兩種風格,有三種:import utils,來自。導入使用情況,以及從應用程序導入使用情況。我想到了這種情況「。」這裏實際上是一個絕對導入,與「import x」情況相反。因此,我在平等的位置上述1和2。確實,對於更深的應用(我的只有一個包和一個子包),有很多地方可以調用「。」 – u0b34a0f6ae 2009-08-23 10:39:38

+1

該應用程序的早期問題是,因爲我有一個名爲「application.application」的模塊,cPickle將無法工作,但pickle會(不同的abs/rel導入處理)。我必須通過重命名模塊來解決問題,無論如何這是一個糟糕的名字。 – u0b34a0f6ae 2009-08-23 10:48:33