在Python的不同子目錄中進行模塊調用時會出現“ModuleNotFoundError: No module named 'backend'” 之類的問題,因為Python在執行時默認會將當前目錄加入到sys.path中,然后會根據sys.pyth中的路徑去找需要導入的模塊,如果找不到就會報錯,因此我們需要將模塊的最上級目錄(如下圖中的pathtest)的絕對路徑添加到sys.path中,然后就可以按照“from backend.func import login”的方式將模塊正常導入了,詳見如下事例:
1、目錄結構如下圖:
2、在main.py中調用login.py中的login函數:
#!/usr/bin/env python #_*_ coding:utf-8 _*_ #encoding=utf-8 #function: #created by xkq #date: 2018 import sys,os base_dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#獲取pathtest的絕對路徑 #os.path.abspath(__file__)#獲取當前文件的絕對路徑 #os.path.dirname(os.path.abspath(__file__))#獲取當前文件所在目錄的絕對路徑 #print(sys.path) sys.path.append(base_dir)#將pathtest的絕對路徑加入到sys.path中 from backend.func import login login.login()
3、login.py中的的內容如下:
#!/usr/bin/env python #_*_ coding:utf-8 _*_ #encoding=utf-8 #function: #created by xkq #date: 2018 def login(): print('login verify........')
4、注意:寫文件是要絕對路徑,否則其他子模塊調用文件是會報錯如:FileNotFoundError: [Errno 2] No such file or directory: 'user.pickle'。可以用如下方法寫絕對路徑:
file=os.path.join(os.path.dirname(os.path.abspath(__file__)), 'user.pickle')#user.pickle的絕對路徑 #file='user.pickle' f=open(file,'rb') user_all=pickle.load(f) f.close()