天天看點

Python之BASEDIR(導入子產品時容易犯得隐形錯誤)

Python之BASEDIR

Python之BASEDIR(導入子產品時容易犯得隐形錯誤)

正常情況下,在test.py子產品裡from module import main 是個隐形的錯誤,雖然程式會正常執行(因為pycharm編譯器搜尋路徑時先在這個路徑’C:\Users\hongsongyangyang\PycharmProjects\ATM\bin’下搜尋,但是卻找不到,然後pycharm編譯器就自動加了一條路徑’C:\Users\hongsongyangyang\PycharmProjects\ATM’,此時就能找到module包下的main子產品了,但是邏輯上确是不正确的,我們可以在指令行視窗運作程式test.py會出現No module named ‘module’。

Python之BASEDIR(導入子產品時容易犯得隐形錯誤)

此時我們可以人為将’C:\Users\hongsongyangyang\PycharmProjects\ATM’路徑加進去。

Python之BASEDIR(導入子產品時容易犯得隐形錯誤)
Python之BASEDIR(導入子產品時容易犯得隐形錯誤)

此時就不會出現No module named 'module’

__ file__ : 是用來獲得子產品所在的路徑的,這得到的是一個相對路徑(在指令行視窗裡運作該程式才能看到相對路徑)

Python之BASEDIR(導入子產品時容易犯得隐形錯誤)
Python之BASEDIR(導入子產品時容易犯得隐形錯誤)

os.path.abspath()—>把相對路徑轉換為絕對路徑

os.path.dirname()—>測試腳本所在的位置,可以一層一層的往上找,例如:

print(os.path.dirname(os.path.abspath(file)))

輸出:C:\Users\hongsongyangyang\PycharmProjects\ATM\bin

print(os.path.dirname(os.path.dirname(os.path.abspath(file))))

輸出:C:\Users\hongsongyangyang\PycharmProjects\ATM

Python之BASEDIR(導入子產品時容易犯得隐形錯誤)
Python之BASEDIR(導入子產品時容易犯得隐形錯誤)

現在在任何電腦上都可以以這種方式導入子產品了。