背景描述:
當在idea編寫python文件導入上級其它同級目錄下文件時,編碼檢查及行行正常,但在linux遠程使用命令執行報“ModuleNotFoundError: No module named 模塊名”錯誤。
項目目錄結構及執行腳本如下:
原因:
首先,瞭解os和sys的區別:
os: 這個模塊提供了一種方便的使用操作系統函數的方法。如:os.path.exists() 是否存在,
sys: 這個模塊可供訪問由解釋器使用或維護的變量和與解釋器進行交互的函數。如:sys.argv 命令行參數List,第一個元素是程序本身路徑
總結:os模塊負責程序與操作系統的交互,提供了訪問操作系統底層的接口;sys模塊負責程序與python解釋器的交互,提供了一系列的函數和變量,用於操控python的運行時環境。
提示自定義的模塊不存在時,一般都是路徑獲取不正確導致未正常找到相應的模塊。可以在代碼首部新增一行 print (sys.path),把路徑全部打印出來確認,查看是否包含模塊目錄,不包含,所以就報找不到該模塊。
解決方案:
注意:根據前面介紹的os和sys的區別瞭解,這裏導入的是當前系統路徑的父目錄,而非當前文件的父目錄。意思就是你需要cd 到該腳本文件路徑下執行纔沒問題,即此時體統路徑和腳本路徑一致,而如果你在該文件的父目錄執行該文件,如python train/train.py, 則又會報錯。
錯入如下:
正確:
參考文章: