之前在引用Python包的時候經常會出現各種各樣的錯誤,網上找了許多方法感覺都解釋的不是特別清楚,當然問題還是解決了,但也是稀里糊塗懵懵懂懂的解決的,后來自己實踐了一下,test了一下,竟然搞懂了。
下面就分享一下,其實很簡單,總結起來就一句話:一切包的相對導入都是在主程序所在目錄之下進行的,不能導入它的上一級目錄中的包。【如果你現在還沒有解決你的問題或者對這方面還是個小白一樣的話,請看看這個博主的一篇博客:https://www.cnblogs.com/ArsenalfanInECNU/p/5346751.html#4316316】
首先我創建了一個實驗目錄,如圖:
在Python IDLE中運行main.py,運行正常,結果如下:
這里,主程序是main.py,是我們第一個打開的程序,我們的一切import、from都是在main.py所在的目錄下進行的,也就是一切相對導入都是在主程序所在的目錄下進行的。下面我們把tom.py作為主程序打開,看看結果如何:
第一行代碼有誤,顯然此時tom.py作為主程序時不能用from . import ***來導入同一級目錄下的文件,若此時想要用tom.py導入同一級目錄下的tombrother.py,刪去from . 就好了,直接用import tombrother就可以了,結果如下:
我們可以看到,沒有提示引入tombrother有誤,提示的錯誤是No module named "Kate",就是沒有找到Kate這個模塊,這是因為,Kate在tom.py所在目錄的外面,而此時,tom.py是主程序,所以Python不會去索引主程序目錄外的目錄去尋找這個Kate文件夾,也就不會找到kate.py,這才導致程序出錯。(當然如果你把tets目錄放在了系統的環境變量中就要另外說了)
所做的這些都是在向大家實踐並檢驗“一切包的相對導入都是在主程序所在目錄之下進行的,不能導入它的上一級目錄中的包”這句話。
以上就是我對Python的包的相對導入的理解,希望可以幫到一頭霧水的你。