以下兩種路徑實現代碼存放在path.py中,查看區別:
base_dir = os.path.dirname(os.getcwd()) # 第一種,當前目錄
# os.getcwd() 定位路徑為common
# os.path.dirname(os.getcwd()) 定位路徑為API_work
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 第二種,該代碼存放的根目錄
# os.path.abspath(__file__) 定位路徑為path.py
# os.path.dirname(os.path.abspath(__file__)) 定位路徑為common
# os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 定位路徑為API_work
以上兩種方式,在path.py中執行,print輸出均為:
但第一種方式,在run.py中調用path.py中的base_dir屬性,查找 "test_*.py" 的根目錄就會出現下以報錯:
原因:
1、在run.py中調用path.py 中的 os.getcwd() 代碼 ,就是定位 run.py 的根目錄;
即:
os.getcwd() 定位路徑為API_work
os.path.dirname(os.getcwd()) 定位路徑為API_work的上一層目錄,因找不到上一層目錄,所以報錯;
2、在run.py中調用第二種方式,是查找path.py的根目錄,所以可執行正常;
總結:
其他模塊會調用固定路徑時,不要使用 os.getcwd() 當前定位方式來實現;使用 os.path.abspath(__file__) 實現。