import匯入檔案路徑注意點

up_bach發表於2024-11-07

目錄結構

 - lib
   - main.py
   - package1
     - subA.py
     - subB.py
   - package2
     - subC.py
   - subD.py

要在main檔案中匯入subA

# 方案1
 - main.py
from package1 import subA
# 方案2
 - main.py
from lib.package1 import subA

要在main檔案中,透過subA匯入subB

# 方案1
 - main.py
from package1 import subA

 - subA.py
# 需要透過修改路徑資訊的方法,將當前路徑加入系統搜尋路徑
import sys
import os

# print(f'修改前的{sys.path = }')
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.abspath(os.path.join(current_dir, os.pardir))
sys.path.append(parent_dir)
# print(f'修改後的{sys.path = }')

form lib.package1 import subB

# 方案2
 - main.py
from lib.package1 import subA

 - subA.py
form . import subB

要在main檔案中匯入subC

# 方案1
 - main.py
from package1 import subA

 - subA.py
# 需要透過修改路徑資訊的方法,將當前路徑加入系統搜尋路徑
import sys
import os

# print(f'修改前的{sys.path = }')
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.abspath(os.path.join(current_dir, os.pardir))
sys.path.append(parent_dir)
# print(f'修改後的{sys.path = }')

form lib.package2 import subC

# 方案2
 - main.py
from lib.package1 import subA

 - subA.py
form ..package2 import subC

兩種方案比較

方案1
需要系統檔案操作,較複雜。
透過系統操作獲得的絕對路徑,適用性更強,而且可以透過直接執行subA,實現匯入subBsubC

方案2
在主程式的導包路徑中新增根目錄,操作簡答。
採用相對路徑,操作較簡便,未驗證使用性,而且無法透過直接執行subA,實現匯入subBsubC

相關文章