2012-12-10 59 views
3

如何確定導入模塊中導入模塊的名稱。我有部分解決方案,但不是完整解決方案。python確定導入模塊的名稱

的代碼是: A.py

import B 

if __name__ == '__main__': 
    print 'This a test' 

的B.py

import sys 
import C 
if sys.argv[0] == 'A': 
    doSomething() 

在這一點上,我的問題都因爲內部模塊B,我知道的名字主要是調用導入,在這種情況下是A.但是,在B中,請求導入C,並且我想知道B是否導入了C?這是如何完成的?

+0

你介意分享一下你爲什麼要這麼做的背景嗎? –

+0

喬恩,我有一個項目,我正在使用一個團隊建立的圖書館。在庫中導入一個模塊,導致路徑問題崩潰。我的意圖是在庫中添加一行代碼,如果myProject正在導入這個模塊,那麼不要導入這個崩潰的模塊,因爲我無論如何都無法使用它。我剛剛被告知,我的請求是不明確的,因爲python只導入一次模塊,所以這個方案可能不健壯。 –

回答

0

然而,我懷疑這實際上是你想要做的。請注意,特別是,B中的頂級代碼只能運行一次,無論從多處導入模塊的次數。例如,如果您還在模塊B到達之前導入模塊D的某個地方導入模塊C,則從C導入的代碼將不會運行。

我認爲這可能是一個更好的主意,只是在C中定義一個函數,B可具有進口C.

2

sys.argv[0]後運行一次,當進行import不是模塊的名稱。這是可執行文件的名稱。

另一方面,在Python模塊__name__內部,等於a)模塊名稱(如果通過導入執行); b)"__main__"如果它作爲腳本執行。

模塊不「知道」誰執行import(沒有「父」屬性或類似的東西)。用不同的功能定義你的行爲,並從不同的模塊中調用它們。

+0

+1「用不同的功能定義你的行爲並從不同的模塊中調用它們。」 – mbatchkarov