python匯入模組的3種方式(超級詳細)
在編寫完python模組之後,如果直接用 import 或 from...import 來匯入該模組,有時並不能正確地載入該模組。道理很簡單,僅通過我們提供的模組檔名,python 無法找到該模組檔案。
程式設計其實並不難,就是用合適的語法告訴計算機,讓它幫助完成某個工作。因此計算機能完成的事情,其實都是程式設計師預先告訴它的。
通常情況下,當使用 import 語句匯入模組後,python 會按照以下順序查詢指定的模組檔案:在當前目錄,即當前執行的程式檔案所在目錄下查詢;
到 pythonpath(環境變數)下的每個目錄中查詢;
到 python 預設的安裝目錄下查詢。
以上所有涉及到的目錄,都儲存在標準模組 sys 的 sys.path 變數中,通過此變數,可以輸出指定程式檔案支援查詢的所有目錄。因此,如果要匯入的模組沒有儲存在 sys.path 顯示的目錄中,那麼匯入該模組並執行程式時,python 直譯器會丟擲 modulenotfounderror(未找到模組)異常。
為了讓 python 能找到自定義(或第三方提供) 的模組,可以用以下 3 種方式來告訴它:向 sys.path 中臨時新增模組檔案儲存位置的完整路徑;
將模組放在 sys.path 變數中已包含的模組載入路徑中。
設定系統環境變數。
介紹這 3 種方式之前,為了能更方便地講解,本節使用前面章節已建立好的 hello.py 自定義模組檔案(d:\python_module\hello.py)和 say.py 程式檔案(c:\users\mengma\desktop\say.py),它們各自包含的**如下:
#hello.py
def say ():
print("hello,world!")
#say.py
import hello
hello.say()
匯入模組方式一:臨時新增模組完整路徑
模組檔案的儲存位置,可以臨時新增到 sys.path 變數中,即向 sys.path 中新增 d:\python_module(hello.py 所在目錄),在 say.py 中的開頭位置新增如下**:import sys
注意:在新增完整路徑中,路徑中的 '\' 需要使用 \ 進行轉義,否則會導致語法錯誤。再次執行 say.py 檔案,執行結果如下:
hello,world!
可以看到,程式成功執行。在此基礎上,我們在 say.py 檔案中輸出 sys.path 變數的值,會得到以下結果:
該輸出資訊中,紅色部分就是臨時新增進去的儲存路徑。需要注意的是,通過該方法新增的目錄,只能在執行當前檔案的視窗中有效,視窗關閉後即失效。
匯入模組方式二:將模組儲存到指定位置
如果要安裝某些通用性模組,比如複數功能支援的模組、矩陣計算支援的模組、圖形介面支援的模組等,這些都屬於對 python 本身進行擴充套件的模組,這種模組應該直接安裝在 python 內部,以便被所有程式共享,此時就可借助於 python 預設的模組載入路徑。
python 程式預設的模組載入路徑儲存在 sys.path 變數中,因此,我們可以在 say.py 程式檔案中先看看 sys.path 中儲存的預設載入路徑,向 say.py 檔案中輸出 sys.path 的值,如下所示:
上面的執行結果中,列出的所有路徑都是 python 預設的模組載入路徑,但通常來說,我們預設將 python 的擴充套件模組新增在lib\site-packages路徑下,它專門用於存放 python 的擴充套件模組和包。
所以,我們可以直接將我們已編寫好的 hello.py 檔案新增到lib\site-packages路徑下,就相當於為 python 擴充套件了乙個 hello 模組,這樣任何 python 程式都可使用該模組。
移動工作完成之後,再次執行 say.py 檔案,可以看到成功執行的結果:
hello,world!
匯入模組方式三:設定環境變數
python 將會根據 pythonpath 環境變數的值來確定到**去載入模組。pythonpath 環境變數的值是多個路徑的集合,這樣 python 就會依次搜尋 pythonpath 環境變數所指定的多個路徑,試圖從中找到程式想要載入的模組。
下面介紹在不同平台上設定環境變數的方式。
在 windows 平台上設定環境變數
右擊桌面上的「計算機」圖示,出現右鍵選單;單擊「屬性」選單項,系統顯示「控制面板\所有控制面板項\系統」視窗,單擊該視窗左邊欄中的「高階系統設定」鏈結,出現「系統屬性」對話方塊,如圖 1 所示。
圖 1 系統屬性對話方塊
單擊該對話方塊中「高階」 tab 頁中的「環境變數」按鈕,將看到如圖 2 所示的「環境變數」對話方塊,通過該對話方塊可以新增或修改環境變數。
圖 2 環境變數對話方塊
在如圖 2 所示的對話方塊中,上面的「使用者變數」部分用於設定當前使用者的環境變數,下面的「系統變數」部分用於設定整個系統的環境變數。
一般建議設定「使用者變數」即可,因為使用者變數只對當前使用者有效,而系統變數對所有使用者有效。為了減少自己所做的修改對其他人的影響,故設定使用者變數。對於當前使用者而言,設定使用者變數和系統變數的效果大致相同,不過系統變數的路徑排在使用者變數的路徑之前。
單擊使用者變數中的「新建」按鈕, 系統顯示如圖 3 所示的對話方塊。
圖 3 新建pythonpath環境變數
在「變數名」文字框內輸入 pythonpath,表明將要建立名為 pythonpath 的環境變數;在「變數值」文字框內輸入.;d:\python_ module,這就是該環境變數的值,該值其實包含了兩條路徑(以 ;分隔):第一條路徑為乙個點(.),這個點代表當前路徑,表明當執行 python 程式時,python 總能從當前路徑載入模組;
第二條路徑為 d:\python_ module,表明當執行 python 程式時,python 總能從 d:\python_ module 載入模組。
在成功設定了上面的環境變數之後,接下來只要把前面定義的模組(python 程式)放在與當前所執行 python 程式相同的路徑中(或放在d:\python_ module路徑下),該模組就能被成功載入了。
在 linux 上設定環境變數
啟動 linux 的終端視窗(命令列介面),進入當前使用者的 home 路徑下,然後在 home 路徑下輸入如下命令:
ls - a
該命令將列出當前路徑下所有的檔案,包括隱藏檔案。linux 平台的環境變數是通過 .bash_profile 檔案來設定的,使用無格式編輯器開啟該檔案,在該檔案中新增 pythonpath 環境變數。也就是為該檔案增加如下一行:
#設定python path 環境變數
pythonpath=.:/home/mengma/python_module
linux 與 windows 平台不一樣,多個路徑之間以冒號(:)作為分隔符,因此上面一行同樣設定了兩條路徑,點(.)代表當前路徑,還有一條路徑是/home/mengma/python_module(mengma 是在 linux 系統的登入名)。
在完成了 pythonpath 變數值的設定後,在 .bash_profile 檔案的最後新增匯出 pythonpath 變數的語句。
#匯出pythonpath 環境變數
export pythonpath
重新登入 linux 平台,或者執行如下命令:
source.bash_profile
這兩種方式都是為了執行該檔案,使在檔案中設定的 pythonpath 變數值生效。
在成功設定了上面的環境變數之後,接下來只要把前面定義的模組(python 程式)放在與當前所執行 python 程式相同的路徑中(或放在/home/mengma/python_module路徑下),該模組就能被成功載入了。
在mac os x 上設定環境變數
在 mac os x 上設定環境變數與 linux 大致相同(因為 mac os x 本身也是類 unix 系統)。啟動 mac os x 的終端視窗(命令列介面),進入當前使用者的 home 路徑下,然後在 home 路徑下輸入如下命令:
ls -a
該命令將列出當前路徑下所有的檔案,包括隱藏檔案。mac os x 平台的環境變數也可通過,bash_profile 檔案來設定,使用無格式編輯器開啟該檔案,在該檔案中新增 pythonpath 環境變數。也就是為該檔案增加如下一行:
#設定python path 環境變盤
pythonpath=.:/users/mengma/python_module
mac os x 的多個路徑之間同樣以冒號(:)作為分隔符,因此上面一行同樣設定了兩條路徑:點(.)代表當前路徑,還有一條路徑是/users/mengma/python_module(memgma 是作者在 mac os x 系統的登入名)。
在完成了 pythonpath 變數值的設定後,在 .bash_profile 檔案的最後新增匯出 pythonpath 變數的語句。
#匯出python path 環境變數
export pythonpath
重新登入 mac os x 系統,或者執行如下命令:
source.bash_profile
這兩種方式都是為了執行該檔案,使在檔案中設定的 pythonpath 變數值生效。
在成功設定了上面的環境變數之後,接下來只要把前面定義的模組(python 程式)放在與當前所執行 python 程式相同的路徑中(或放在users/mengma/python_module路徑下),該模組就能被成功載入了。
華為程式設計大賽
本試題採用自動測試用例進行評分,測試用例不對考生公開,凡不滿足提交要求導致不能執行或用例不通過,不予評分 1 排序演算法 20分 l 問題描述 將給定的無序整數陣列降序排列後輸出,輸入的無序陣列長度為n,型別為unsigned int l 要求實現函式 void dscsort const int ...
華為程式設計大賽決賽題
題目 俄羅斯方塊覆蓋。給定 乙個21 21的格仔矩陣,從1到441編號。輸入是乙個檔案testin.txt,裡面有4個數字,每乙個數字代表陣列下標,陣列元素值為1,表示障礙。空著的格仔用0表示。這四個數字代表的圖形只能是這個中的一種!也就是說。矩陣中4個1勾勒出個圖形只能是這兩種樣子。要求是用俄羅斯...
華為筆試程式設計1
請在乙個字串中找出連續最長的數字串。具體描述如下圖 演算法思想 這個題目比較簡單,可以迴圈遍歷一次,判斷當前字元是否為數字,如果是則記錄當前長度加1,否則,判斷當前長度是否大於等於最大長度,如果是,則更新最大長度和數字的起始位置 為了能將最大長度的連續數字輸出,故作此記錄 並將當前長度置為0,重新統...