導包時出現如下錯誤
from test_project.test_case.test_battal import TestBattal
ModuleNotFoundError: No module named 'test_project'
說明python執行時找不到這個包文件,所以無法調用。那么我們需要先知道python是如何搜索的。
當一個名為 ***的模塊被導入的時候,解釋器首先尋找具有該名稱的內置模塊。如果沒有找到,然后解釋器從 sys.path 變量給出的目錄列表里尋找名為 ***.py 的文件
可以使用[sys.path]打印出python找包的路徑
import sys
print(sys.path)
解決辦法一:
將文件的目錄臨時追加到搜索目錄中,因為目錄寫死,只適合臨時解決問題
#注意導包代碼需要放在添加路徑的代碼后,否則依然無法找到包
import sys
import unittest
import os
sys.path.append(r'F:/教程/全棧測試開發課程/第26課時')
# dir_path1 = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# sys.path.append(dir_path1)
# print(dir_path1)
from test_project.test_case.test_battal import TestBattal
if __name__ == '__main__':
# 根據給定的測試類,獲取其中所有以test開頭的測試方法,並返回一個測試套件
suite1 = unittest.TestLoader().loadTestsFromTestCase(TestBattal)
# 將多個測試類加載到測試套件中
suite = unittest.TestSuite([suite1])
# 設置verbosity = 2,可以打印出更詳細的執行信息
unittest.TextTestRunner(verbosity=2).run(suite)
解決辦法二:
使用相對路徑,臨時添加到sys.path目錄,包目錄不依賴環境,隨便更換環境都可執行。
#注意導包代碼需要放在添加路徑的代碼后,否則依然無法找到包
dir_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.append(dir_path)
解決辦法三:
直接寫入到python系統路徑,可以永久解決,但是路徑也是寫死的。
使用pth文件,在 site-packages 文件中創建 .pth文件,將模塊的路徑寫進去,一行一個路徑,以下是一個示例,pth文件也可以使用注釋:
# write to apckage path
C:\Users\Administrator\Desktop\test_project
C:\Users\Administrator\Desktop
然后可以愉快的導包玩耍了。
解決辦法四:
既然python是通過查找路徑來找包,那么我們可以配置環境變量,讓python去我們指定的路徑去找,這樣也是可以解決問題。
新建用戶環境變量
設置名稱和路徑
其中,在“變量名”文本框內輸入 PYTHONPATH,表明將要建立名為 PYTHONPATH 的環境變量;在“變量值”文本框內輸入 .;d:\python_ module。注意,這里其實包含了兩條路徑(以分號 ;作為分隔符):
第一條路徑為一個點(.),表示當前路徑,當運行 Python 程序時,Python 將可以從當前路徑加載模塊;
第二條路徑為 C:\Users\Acer\Desktop,當運行 Python 程序時,Python 將可以從 桌面 中加載模塊。
然后點擊“確定”,即成功設置 path 環境變量。此時,我們只需要將模塊文件移動到和引入該模塊的文件相同的目錄,或者移動到 C:\Users\Acer\Desktop 路徑下,該模塊就能被成功加載。