<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
很多初學者經常遇到這樣的問題,即自定義 Python 模板後,在其它檔案中用 import(或 from...import) 語句引入該檔案時,Python 直譯器同時如下錯誤:
ModuleNotFoundError: No module named '模組名'
意思是 Python 找不到這個模組名,這是什麼原因導致的呢?要想解決這個問題,讀者要先搞清楚 Python 直譯器查詢模組檔案的過程。
通常情況下,當使用 import 語句匯入模組後,Python 會按照以下順序查詢指定的模組檔案:
以上所有涉及到的目錄,都儲存在標準模組 sys 的 sys.path 變數中,通過此變數我們可以看到指定程式檔案支援查詢的所有目錄。
換句話說,如果要匯入的模組沒有儲存在 sys.path 顯示的目錄中,那麼匯入該模組並執行程式時,Python 直譯器就會丟擲 ModuleNotFoundError(未找到模組)異常。
解決“Python找不到指定模組”的方法有 3 種,分別是:
不過,在詳細介紹這 3 種方式之前,為了能更方便地講解,本節使用前面章節已建立好的 hello.py 自定義模組檔案(D:python_modulehello.py)和 say.py 程式檔案(C:UsersmengmaDesktopsay.py,位於桌面上),它們各自包含的程式碼如下:
#hello.py def say (): print("Hello,World!") #say.py import hello hello.say()
顯然,hello.py 檔案和 say.py 檔案並不在同一目錄,此時執行 say.py 檔案,其執行結果為:
Traceback (most recent call last):
File "C:UsersmengmaDesktopsay.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 中的開頭位置新增如下程式碼:
import sys 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 的擴充套件模組新增在 libsite-packages
路徑下,它專門用於存放 Python 的擴充套件模組和包。
所以,我們可以直接將我們已編寫好的 hello.py 檔案新增到 libsite-packages
路徑下,就相當於為 Python 擴充套件了一個 hello 模組,這樣任何 Python 程式都可使用該模組。
移動工作完成之後,再次執行 say.py 檔案,可以看到成功執行的結果:
Hello,World!
PYTHONPATH 環境變數(簡稱 path 變數)的值是很多路徑組成的集合,Python 直譯器會按照 path 包含的路徑進行一次搜尋,直到找到指定要載入的模組。
當然,如果最終依舊沒有找到,則 Python 就報 ModuleNotFoundError 異常。
由於不同平臺,設定 path 環境變數的設定流程不盡相同,因此接下來就使用最多的 Windows、Linux、Mac OS X 這 3 個平臺,給讀者介紹如何設定 path 環境變數。
在 Windows 平臺上設定環境變數
首先,找到桌面上的“計算機”(或者我的電腦),並點選滑鼠右鍵,單擊“屬性”。此時會顯示“控制面板所有控制面板項系統”視窗,單擊該視窗左邊欄中的“高階系統設定”選單,出現“系統屬性”對話方塊,如下圖所示:
如上圖所示,點選“環境變數”按鈕,此時將彈出下圖所示的對話方塊:
如上圖所示,通過該對話方塊,就可以完成 path 環境變數的設定。需要注意的是,該對話方塊分為上下 2 部分,其中上面的“使用者變數”部分用於設定當前使用者的環境變數,下面的“系統變數”部分用於設定整個系統的環境變數。
通常情況下,建議大家設定設定使用者的 path 變數即可,因為此設定僅對當前登陸系統的使用者有效,而如果修改系統的 path 變數,則對所有使用者有效。
對於普通使用者來說,設定使用者 path 變數和系統 path 變數的效果是相同的,但 Python 在使用 path 變數時,會先按照系統 path 變數的路徑去查詢,然後再按照使用者 path 變數的路徑去查詢。
這裡我們選擇設定當前使用者的 path 變數。單擊使用者變數中的“新建”按鈕, 系統會彈出如下圖所示的對話方塊。
其中,在“變數名”文字方塊內輸入 PYTHONPATH,表明將要建立名為 PYTHONPATH 的環境變數;在“變數值”文字方塊內輸入 .;d:python_ module
。
注意,這裡其實包含了兩條路徑(以分號 ;作為分隔符):
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 環境變數 export PYTHONPATH
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
路徑下),該模組就能被成功載入了。
到此這篇關於Python匯入模組的3種方式小結的文章就介紹到這了,更多相關Python匯入模組內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45