Python中 No module named解決方法

有時候運行Python程序,如python bob.py會出現報錯No module named '×××',這是因爲import ×××時發生了錯誤。該如何解決呢?下面分兩種情況分析:

(1)如果'×××'是一些python包,比如說numpy、pandas等,這時候在終端輸入pip install ×××命令安裝相應的包即可

(2)如果'×××'是非python的包, 比如說自己寫了個alice.py文件,然後在bob.py的文件裏要調用a,即import alice或者from alice import,這時候如果報錯No module named '×××'的話,是因爲系統找不到alice.py這個文件。

解決方法:爲python解釋器指定搜索路徑,即把alice的路徑添加到環境變量裏。可以在bob.py文件的開始加入以下代碼,並使得alice.py在root_path路徑下

root_path = os.path.abspath(__file__)
root_path = '/'.join(root_path.split('/')[:-2])
sys.path.append(root_path)

下面來簡單解釋一下,當執行import ×××操作時,默認情況下python解析器會搜索當前目錄、已安裝的內置模塊和第三方模塊,搜索路徑存放在sys模塊的path中,sys.path是一個列表,如下圖所示。如果要import的×××不在以下列表就會報錯。

所以,我們需要sys.path.append(alice文件所在的父路徑或者父路徑的父路徑,我們定義爲root_path)

那麼如何得到root_path呢?

一種方法是root_path="直接寫相應的路徑",這裏的路徑一般寫整個項目文件的路徑

另外一種方法如下

# STEP 1:先得到文件的絕對路徑,比如本文中在bob.py文件中加入下面的代碼即可得到bob.py的絕對路徑“/home/codes/research/bob.py”
root_path = os.path.abspath(__file__)

# STEP 2:根據bob.py和alice.py路徑的關係,得到能夠包含alice.py的路徑,一般直接寫項目路徑
root_path = '/'.join(root_path.split('/')[:-2])
上面的代碼等價於下面的寫法
root_path = os.path.dirname(os.path.dirname(abs_path)) # 父路徑的父路徑

 

什麼?您說您用Pycharm?哦!那我告訴你另外一個解決No module named '×××'的辦法,和之前介紹的方法是一樣的功能。

如下圖,即mask directory as Sources Root,這樣就再也不用擔心import非python包報錯了。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章