1. 程式人生 > >Python全棧day21(調用模塊路徑BASEDIR的正確方法)

Python全棧day21(調用模塊路徑BASEDIR的正確方法)

變化 一個 pre dirname 發生 文件 導入 復制 sys

正常寫python程序會有一個可執行的bin.py文件,假如這個文件需要導入my_module裏面定義的模塊,應該怎麽設置sys.path

文件夾目錄結構如下,因為bin不在與my_module同級目錄下,而是在bin目錄下,如果直接使用from my_module import main調用模塊肯定會報錯,需要把對應的上一級目錄day21_lesson添加到sys.path

技術分享圖片

  一,使用絕對路徑添加

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裏面相當於把程序寫死了,一旦目錄結構發生變化或者復制到其他主機將不能運行

  二,使用相對路徑添加

  __file__變量是文件的名稱

  os.path.dirname 是os內置方法取文件的路徑這裏連續使用兩次方法取文件bin.py路徑為D:/blzfmima/python3_s3/day21/day21_lesson/bin 然後在針對這個路徑再取一次路徑獲取需要的路徑D:/blzfmima/python3_s3/day21/day21_lesson/

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會自作主張添加絕對路徑

  三,終極方法 使用os.path.abspath取文件bin.py絕對路徑 然後使用兩次os.path.dirname取到上兩層的路徑及本列的路徑D:/blzfmima/python3_s3/day21/day21_lesson/

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

  

Python全棧day21(調用模塊路徑BASEDIR的正確方法)