當python導入模塊,執行import語句時,到底進行了什么操作?按照python的文檔,她執行了如下的操作:
第一步,創建一個新的module對象(它可能包含多個module)
第二步,把這個module對象插到sys.module中
第三步,裝載module的代碼(如果需要,則必須先編譯)
第四步,執行新的module中對應的代碼。
在執行第三步時,首先需要找到module程序所在的位置,搜索的順序是:
當前路徑(以及從當前目錄指定的sys.path),pythonpath,然后是python安裝時設置的相關默認路徑。正因為存在這樣的順序,所以如果當前路徑或pythonpath中存在與標准module相同的module,則會覆蓋標准module。也就是如果當前目錄下存在xml.py,那么執行import xml時,導入的是當前目錄下的module,而不是系統標准的xml。所以我們平常起名字時不能亂起。
了解這些之后,我們就可以先構建一個package,以普通module的方式導入,這樣就可以直接訪問此package中的各個module。python2中package必須包含一個__init__.py的文件。擁有這個文件使得python解釋器將子目錄整個也當成一個模塊,然后直接通過“import 子目錄.模塊”導入即可。如果沒有這個文件就會被當成一個普通文件夾,而不是模塊。