如果import
一個文件,那麼Python會執行兩個不同的步驟:
- 打開導入模塊文件並執行它,包括在模塊中的任何
import
語句。
- 使導入的模塊在當前模塊的名稱空間中可用。
請注意,如果您導入模塊foo
,那麼你將無法獲得通過foo
在命名空間導入模塊 - 你需要直接導入(或通過foo.module
訪問它們,但通常你會想要將它們導入你的模塊中)。
簡而言之,即使同一應用程序中的其他文件也使用它,每個要使用模塊foo
的文件都需要導入它。
一件事,如果你從另一種語言來可能會造成混淆的是,Python的只有永遠居然一下子執行給定模塊(除非你調用reload()
),即使它在很多地方的輸入型。這就是爲什麼我將import
的動作分爲兩部分 - 第一部分只對每個導入的模塊執行一次,但第二部分總是發生。
所以,如果你這樣做import foo
這本身執行import bar
那麼這兩個foo
和bar
已經被加載並執行一次。您的模塊有權訪問foo
,但不能使用bar
,因爲您尚未導入它(同樣,您可以將其作爲foo.bar
使用,但這通常不是很好的做法)。如果您現在運行import bar
,那麼您的模塊中將有bar
可用,但是由於該模塊已被導入,一旦Python將而非加載並再次執行該模塊。
如果您需要更多詳細信息,有關模塊工作方式的詳細信息請參見official Python documentation。
這是否回答你的問題?
額外的細節
通常你不需要通過掃描目錄加載在運行時模塊,但存在這樣的情況,可以是有用的(例如實施插件)。如果你只是想安裝基於哪些模塊的固定列表之間進行選擇,你可以做一個標準的import
,趕上ImportError
並試圖在列表中的下一個處理。
如果做需要加載的模塊,當你不知道名字,直到運行時,您可以使用importlib。 Python標準庫還提供several other modules for importing modules,如imp,其具有用於定位和通過文件名導入模塊的功能。
這聽起來像你已經得到了一個解決方案,但它有時是有用知道的是可還有什麼(而這些模塊是標準庫的一部分,所以總是安裝)。
是它呢!謝謝:),一旦計時器已到期將選擇。再次感謝! – Killrawr