Python-不同子目錄之間進行模塊調用時的路徑問題


       在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()

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM