2009-12-14 27 views
13

當一個文件prog.py與一個名稱相同的本地模塊(math.py)放在同一個目錄中時,如何訪問一個標準庫模塊(如數學)?當有一個名稱相同的本地模塊時,如何訪問Python中的標準庫模塊?

我問這個問題,因爲我想創建一個包uncertainties一個可以使用的

import uncertainties 
from uncertainties.math import * 

因此,不確定性目錄內本地數學模塊。問題是我想從不確定性/ __ init__.py中訪問標準庫數學模塊。

我不喜歡重新命名不確定因素,因爲這個模塊的目的是用數學模塊(用等價的數值不確定性)代替函數。

PS:這個問題屬於我爲執行calculations with uncertainties而編寫的模塊,同時考慮到變量之間的相關性。

回答

19

您正在尋找從PEP 328進口的絕對值/相對值,可通過2.5 and upward獲取。

在Python 2.5中,您可以使用from __future__ import absolute_import指令將導入的行爲切換到絕對導入。這個絕對導入行爲將成爲未來版本的默認值(可能是Python 2.7)。一旦絕對導入是默認導入,導入數學將始終找到標準庫的版本。建議用戶應儘可能多地使用絕對導入,所以最好從代碼中的pkg導入字符串開始寫入。

相對進口使用從...進口形式時仍然加入了領先的週期模塊名稱可能:

from __future__ import absolute_import 
# Import uncertainties.math 
from . import math as local_math 
import math as sys_math 
+0

驗證爲答案:這回答了這個問題(儘管S.洛特讓我相信我應該遵循另一條路線:)。 – EOL 2009-12-15 13:42:06

+0

是的,我不會使用數學作爲模塊名稱;) – mbarkhau 2009-12-15 15:59:59

+4

「可能在2.7」 - 實際上從未發生過。 2.7用戶需要absolute_import行,如果他們想要這種行爲。 – Joe 2015-01-12 19:33:24

5

爲什麼你不能重新命名你的本地模塊?

顯然,如果您仍然需要安裝uncertainties中的東西,那麼它不是「全部」替代品。

由於是部分替換,所以不應該給它同名。

有什麼不同?什麼是相同的?根據這個選擇一個更好的名字。

+0

+1:理所當然的,它不是一個完整的替代品。我將考慮重新命名(未來)不確定性.math模塊。 PS:標準的數學模塊用於不確定因素。因爲不確定性是通過不知道不確定性的數學函數操縱的(不確定性因素可以使用模塊,速度成本,因爲它比標準數學模塊更普遍) – EOL 2009-12-14 12:43:07

+0

@EOL:你不能簡單地用另一個同名的模塊來代替基本的「數學」。期。這讓用戶感到困惑。儘管您希望提供平滑的「引腳到引腳」替換,但不要這樣做。請不要。稱之爲「umath」或者明確指出它不是「數學」的東西。 – 2009-12-14 12:47:18

+1

@S。洛特:是的,我曾認爲「進口不確定因素可能會很明顯,因爲從不確定因素導入數學」,但我沒有看到「math.sin()」會令人困惑。我會以你的名義爲它命名。 :) – EOL 2009-12-15 13:40:44

相關問題