需要注意的是文件夾被python解釋器視作package需要滿足兩個條件:
- 1.文件夾中必須有__init__.py文件,該文件可以爲空,但必須存在該文件。
- 2.不能作爲頂層模塊來執行該文件夾中的py文件(即不能作爲主函數的入口)。
所以,當用.. 或 ../..返回上級去導入的時候,如果到了程序的入口就會報錯:ValueError: attempted relative import beyond top-level package
這是因爲第2條的原因,也就是相對導入的時候不能返回到頂層目錄去導入,否則會報錯。
所以,用絕對導入的人比較多,相對導入中一個點(同級導入)用的比較多。
相對路徑 ..表示上一層,...表示上上層,依次類推。
但是不 能無限的,當到達啓動文件的那一層的時候就會報錯 ValueError: attempted relative import beyond top-level package
這個可以參看上面的規則。
所以比較方便的是直接添加SYSPATH,然後全部按啓動文件的那個目錄爲根目錄往下包含就好了,不用相對路徑了
import sys
import os
curpath = os.path.abspath(os.path.dirname(__file__)
sys.path.append(curpath)
這篇文章解釋的比較清楚