網(wǎng)站建設(shè)收費報價表中國去中心化搜索引擎
問題描述
在執(zhí)行某個測試模塊時出現(xiàn)提示,顯示自定義模塊data
不存在,但是在PyCharm下運行正常。錯誤信息如下:
Traceback (most recent call last):File "/run/channelnterface-autocase/testcases/test_chanel_detail.py", line 2, in <module>from data.chanel_detail_makecase import *
ModuleNotFoundError: No module named 'data'
問題原因
大部分情況下,此類問題是由于包的路徑?jīng)]有設(shè)置正確所致。通過打印 PyCharm 和命令行下的 sys.path
路徑信息對比,可以發(fā)現(xiàn)以下差異:
在當(dāng)前目錄下__init__
添加
import sys
print("系統(tǒng)路徑",sys.path)
分別用PyCharm與命令行執(zhí)行
-
PyCharm
包含了當(dāng)前的目錄以及這個代碼的根目錄(前提是需要將這個根目錄設(shè)置為Sources Root)
結(jié)果:系統(tǒng)路徑 [‘D:\uitest\channelnterface-autocase\testcases’, ‘D:\uitest’, ‘D:\uitest\channelnterface-autocase’… -
使用Pyhton命令行執(zhí)行
結(jié)果為系統(tǒng)路徑 [‘D:\uitest\channelnterface-autocase\testcases’…
在PyCharm設(shè)置了Sources Root,向系統(tǒng)變量增加了當(dāng)前目錄的根目錄,所以PyCharm運行時能找到自定義包的。但Pyhton命令行執(zhí)行時少了添加根目錄路徑的步驟,導(dǎo)致找不到包了。
解決方法
向執(zhí)行代碼中添加根目錄路徑,一般添加在頭部
方法一:寫死絕對路徑
import sys
sys.path.append('xxx/xxx/xxx/')
方法二:使用os獲取
os.path.dirname
獲取目錄,此處就是獲取目錄的父目錄。如果目錄層級更多,就需要多加一層 os.path.dirname
import os,sys
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(project_root)
方法三:os獲取+/…/
如果層級更多,則需要多加"…/" ,看起來比方法二更加簡潔點
import os,sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../')
方法四,直接加到環(huán)境變量path中
輸入以下命令
export PYTHONPATH=$PYTHONPATH:/xxx/
總結(jié):
可能還有其他方法,但大體上找不到module的問題,大部分是路徑變量問題,按照這個思路去解決就可以解決大部分類似問題。