正常寫python程序會有一個可執行的bin.py文件,假如這個文件須要導入my_module裏面定義的模塊,應該怎麼設置sys.pathpython
文件夾目錄結構以下,由於bin不在與my_module同級目錄下,而是在bin目錄下,若是直接使用from my_module import main調用模塊確定會報錯,須要把對應的上一級目錄day21_lesson添加到sys.pathapp
一,使用絕對路徑添加less
import sys,os sys.path.append(r'D:/blzfmima/python3_s3/day21/day21_lesson/') from my_module import main main.run() print(__name__) if __name__ == '__main__': pass
使用絕對路徑把對應的目錄添加到sys.path裏面至關於把程序寫死了,一旦目錄結構發生變化或者複製到其餘主機將不能運行spa
二,使用相對路徑添加code
__file__變量是文件的名稱blog
os.path.dirname 是os內置方法取文件的路徑這裏連續使用兩次方法取文件bin.py路徑爲D:/blzfmima/python3_s3/day21/day21_lesson/bin 而後在針對這個路徑再取一次路徑獲取須要的路徑D:/blzfmima/python3_s3/day21/day21_lesson/pycharm
import sys,os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) sys.path.append(BASE_DIR) #sys.path.append(r'D:/blzfmima/python3_s3/day21/day21_lesson/') from my_module import main main.run() print(__name__) if __name__ == '__main__': pass
以上能夠在pycharm裏面正常實現調用,可是在終端執行仍是會出錯,由於Pycharm會自做主張添加絕對路徑class
三,終極方法 使用os.path.abspath取文件bin.py絕對路徑 而後使用兩次os.path.dirname取到上兩層的路徑及本列的路徑D:/blzfmima/python3_s3/day21/day21_lesson/import
import sys,os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) #sys.path.append(r'D:/blzfmima/python3_s3/day21/day21_lesson/') from my_module import main main.run() print(__name__) if __name__ == '__main__': pass