1. 程式人生 > 其它 >Python匯入模組的3種詳細教程

Python匯入模組的3種詳細教程

很多初學者經常遇到這樣的問題,即自定義Python模板後,在其它檔案中用 import(或 from...import) 語句引入該檔案時,Python 直譯器同時如下錯誤:

ModuleNotFoundError: No module named '模組名'

意思是 Python 找不到這個模組名,這是什麼原因導致的呢?要想解決這個問題,讀者要先搞清楚 Python 直譯器查詢模組檔案的過程。

通常情況下,當使用 import 語句匯入模組後,Python 會按照以下順序查詢指定的模組檔案:

  • 在當前目錄,即當前執行的程式檔案所在目錄下查詢;
  • 到 PYTHONPATH(環境變數)下的每個目錄中查詢;
  • 到 Python 預設的安裝目錄下查詢。


以上所有涉及到的目錄,都儲存在標準模組 sys 的 sys.path 變數中,通過此變數我們可以看到指定程式檔案支援查詢的所有目錄。換句話說,如果要匯入的模組沒有儲存在 sys.path 顯示的目錄中,那麼匯入該模組並執行程式時,Python 直譯器就會丟擲 ModuleNotFoundError(未找到模組)異常。

解決“Python找不到指定模組”的方法有 3 種,分別是:

  1. 向 sys.path 中臨時新增模組檔案儲存位置的完整路徑;
  2. 將模組放在 sys.path 變數中已包含的模組載入路徑中;
  3. 設定 path 系統環境變數。


不過,在詳細介紹這 3 種方式之前,為了能更方便地講解,本節使用前面章節已建立好的 hello.py 自定義模組檔案(D:\python_module\hello.py)和 say.py 程式檔案(C:\Users\mengma\Desktop\say.py,位於桌面上),它們各自包含的程式碼如下:

  1. #hello.py
  2. def say ():
  3. print("Hello,World!")
  4. #say.py
  5. import hello
  6. hello.say()

顯然,hello.py 檔案和 say.py 檔案並不在同一目錄,此時執行 say.py 檔案,其執行結果為:

Traceback (most recent call last):
File "C:\Users\mengma\Desktop\say.py", line 1, in <module>
import hello
ModuleNotFoundError: No module named 'hello'

可以看到,Python 直譯器丟擲了ModuleNotFoundError 異常。接下來,分別用以上 3 種方法解決這個問題。

匯入模組方式一:臨時新增模組完整路徑

模組檔案的儲存位置,可以臨時新增到 sys.path 變數中,即向 sys.path 中新增 D:\python_module(hello.py 所在目錄),在 say.py 中的開頭位置新增如下程式碼:

  1. import sys
  2. sys.path.append('D:\\python_module')

注意:在新增完整路徑中,路徑中的 '\' 需要使用 \ 進行轉義,否則會導致語法錯誤。再次執行 say.py 檔案,執行結果如下:

Hello,World!

可以看到,程式成功執行。在此基礎上,我們在 say.py 檔案中輸出 sys.path 變數的值,會得到以下結果:

['C:\\Users\\mengma\\Desktop', 'D:\\python3.6\\Lib\\idlelib', 'D:\\python3.6\\python36.zip', 'D:\\python3.6\\DLLs', 'D:\\python3.6\\lib', 'D:\\python3.6', 'C:\\Users\\mengma\\AppData\\Roaming\\Python\\Python36\\site-packages', 'D:\\python3.6\\lib\\site-packages', 'D:\\python3.6\\lib\\site-packages\\win32', 'D:\\python3.6\\lib\\site-packages\\win32\\lib', 'D:\\python3.6\\lib\\site-packages\\Pythonwin','D:\\python_module']

該輸出資訊中,紅色部分就是臨時新增進去的儲存路徑。需要注意的是,通過該方法新增的目錄,只能在執行當前檔案的視窗中有效,視窗關閉後即失效。

匯入模組方式二:將模組儲存到指定位置

如果要安裝某些通用性模組,比如複數功能支援的模組、矩陣計算支援的模組、圖形介面支援的模組等,這些都屬於對 Python 本身進行擴充套件的模組,這種模組應該直接安裝在 Python 內部,以便被所有程式共享,此時就可藉助於 Python 預設的模組載入路徑。

Python 程式預設的模組載入路徑儲存在 sys.path 變數中,因此,我們可以在 say.py 程式檔案中先看看 sys.path 中儲存的預設載入路徑,向 say.py 檔案中輸出 sys.path 的值,如下所示:

['C:\\Users\\mengma\\Desktop', 'D:\\python3.6\\Lib\\idlelib', 'D:\\python3.6\\python36.zip', 'D:\\python3.6\\DLLs', 'D:\\python3.6\\lib', 'D:\\python3.6', 'C:\\Users\\mengma\\AppData\\Roaming\\Python\\Python36\\site-packages','D:\\python3.6\\lib\\site-packages', 'D:\\python3.6\\lib\\site-packages\\win32', 'D:\\python3.6\\lib\\site-packages\\win32\\lib', 'D:\\python3.6\\lib\\site-packages\\Pythonwin']

上面的執行結果中,列出的所有路徑都是 Python 預設的模組載入路徑,但通常來說,我們預設將 Python 的擴充套件模組新增在lib\site-packages路徑下,它專門用於存放 Python 的擴充套件模組和包。

所以,我們可以直接將我們已編寫好的 hello.py 檔案新增到lib\site-packages路徑下,就相當於為 Python 擴充套件了一個 hello 模組,這樣任何 Python 程式都可使用該模組。

移動工作完成之後,再次執行 say.py 檔案,可以看到成功執行的結果:

Hello,World!

匯入模組方式三:設定環境變數

PYTHONPATH 環境變數(簡稱 path 變數)的值是很多路徑組成的集合,Python 直譯器會按照path 包含的路徑進行一次搜尋,直到找到指定要載入的模組。當然,如果最終依舊沒有找到,則 Python 就報ModuleNotFoundError 異常。

由於不同平臺,設定 path 環境變數的設定流程不盡相同,因此接下來就使用最多的 Windows、Linux、Mac OS X 這 3 個平臺,給讀者介紹如何設定 path 環境變數。

在 Windows 平臺上設定環境變數

首先,找到桌面上的“計算機”(或者我的電腦),並點選滑鼠右鍵,單擊“屬性”。此時會顯示“控制面板\所有控制面板項\系統”視窗,單擊該視窗左邊欄中的“高階系統設定”選單,出現“系統屬性”對話方塊,如圖 1 所示。



圖 1 系統屬性對話方塊


如圖 1 所示,點選“環境變數”按鈕,此時將彈出圖 2 所示的對話方塊:



圖 2 環境變數對話方塊


如圖 2 所示,通過該對話方塊,就可以完成 path 環境變數的設定。需要注意的是,該對話方塊分為上下 2 部分,其中上面的“使用者變數”部分用於設定當前使用者的環境變數,下面的“系統變數”部分用於設定整個系統的環境變數。推薦第一留學

通常情況下,建議大家設定設定使用者的 path 變數即可,因為此設定僅對當前登陸系統的使用者有效,而如果修改系統的 path 變數,則對所有使用者有效。

對於普通使用者來說,設定使用者 path 變數和系統 path 變數的效果是相同的,但 Python 在使用 path 變數時,會先按照系統 path 變數的路徑去查詢,然後再按照使用者 path 變數的路徑去查詢。

這裡我們選擇設定當前使用者的 path 變數。單擊使用者變數中的“新建”按鈕, 系統會彈出如圖 3 所示的對話方塊。



圖 3 新建PYTHONPATH環境變數


其中,在“變數名”文字框內輸入 PYTHONPATH,表明將要建立名為 PYTHONPATH 的環境變數;在“變數值”文字框內輸入.;d:\python_ module。注意,這裡其實包含了兩條路徑(以分號 ;作為分隔符):英國留學哪些城市好:http://www.liuxue1.com/yingguo/yingguoliuxuechengshi2.html

  • 第一條路徑為一個點(.),表示當前路徑,當執行 Python 程式時,Python 將可以從當前路徑載入模組;
  • 第二條路徑為d:\python_ module,當執行 Python 程式時,Python 將可以從d:\python_ module中載入模組。


然後點選“確定”,即成功設定 path 環境變數。此時,我們只需要將模組檔案移動到和引入該模組的檔案相同的目錄,或者移動到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路徑下),該模組就能被成功載入了。