2010-09-23 83 views
0

我有一個包含兩個模塊的包。一個是__init__文件,另一個是該軟件包的獨立部分。如果我嘗試from mypackage import separatepart,則運行__init__模塊中的代碼,該代碼將運行不需要的代碼,從而大大減緩導入速度。單獨部分的代碼不會導致任何錯誤,因此用戶應該能夠直接導入它,而無需導入__init__模塊。在全局範圍內創建所有變量或在另一個模塊內部導入模塊

因爲我找不到一種方法來做到這一點,我認爲我應該在__init__文件中包含一個函數,這樣做不會直接做任何事情,但爲了做到這一點,我需要有任何變量設置爲全局。有什麼方法可以告訴Python,所有變量在函數中是全局變量,還是不運行__init__模塊?

+0

首先,一個「包」包含「模塊」。模塊直接(1到1)映射到文件。我認爲你有一個包含兩個「模塊」的「包」。 「可能在某些系統上導致錯誤」是模糊和混亂的。你爲什麼不使用'try'模塊? – 2010-09-23 00:44:49

+0

@ S.Lott你是對的。我沒有很好地提出這個問題,如果我造成任何混淆,我很抱歉。 – None 2010-09-23 01:05:45

+0

不要道歉。請解決問題。其他人可能會遇到這個問題。請修改措辭並提供缺失的詳細信息。 – 2010-09-23 03:07:59

回答

1

dthat我知道,沒有辦法指定全部變量是全局變量,但您可以在模塊中導入模塊。 只要確保你在頂層沒有調用的函數中做到這一點,就可以在這裏玩無限遞歸,但是簡單的使用應該是安全的。

#module.py 

foo = bar = 0 # global 

def init() 
    import module as m 

    m.foo = 1 
    m.bar = 2 # access to globals 

如果 init被稱爲在頂層,那麼你有無限遞歸,但它聽起來像這樣整點是爲了避免這個代碼在頂層運行,所以你應該是安全的。 由於您想在__init__.py文件中執行此操作,只需導入包的頂層。

我發現在這裏,遞歸沒有問題,因爲頂級代碼只會在初始導入時運行一次。

+0

完美!我用'self = __import __(__ name __)'。 – None 2010-09-23 00:37:27

+0

@無。很高興它的工作。我可能不會使用「自我」(爲了清晰起見),但是不管怎樣漂浮你的船;) – aaronasterling 2010-09-23 01:37:45

相關問題