背景
最近在運用Django和pytest框架的時候矛渴,需要跨文件引用函數(shù)和類雏门,現(xiàn)匯總各種場景下引用文件的方法伤柄。
直接跨文件引用
1.同一個文件夾兩個不同文件間引用
-- src
|-- mod1.py
|-- mod2.py
文件mod2想要引用文件mod1內(nèi)的函數(shù)/類:from .mod1 import *
PS.不使用框架的時候铸鹰,可移除mod1前面的.
2.不同文件夾下跨文件引用
-- src
|-- mod1.py
|-- lib
|? ? |-- mod2.py
|-- sub
|? ? |-- mod3.py
文件mod1想要引用文件mod2內(nèi)的函數(shù)/類:from ..lib.mod2 import *
文件mod2想要引用文件mod1內(nèi)的函數(shù)/類
文件mod2想要引用文件mod3內(nèi)的函數(shù)/類
-- src
|-- mod1.py
|-- lib
? ? |-- sub1
? ? ? ? |? ? |-- mod2.py
|-- sub
|? ? |-- mod3.py
文件mod1想要引用文件mod2內(nèi)的函數(shù)/類
文件mod2想要引用文件mod1內(nèi)的函數(shù)/類
文件mod2想要引用文件mod3內(nèi)的函數(shù)/類
借助sys.path的方式引用
建議采用相對路徑的方式年缎,比絕對路徑要更好悔捶,不會受限文件路徑變更
相對路徑的里面:.代表同一級;..代表上一級
以不同文件夾跨文件引用為例
文件mod2想要引用文件mod3內(nèi)的函數(shù)/類:
需要在文件mod2頭部增加如下代碼
import sys
sys.path("..") ? ? ? ? ? ? ? ? ? ? ? ? ?//目前文件所在層級/src/lib/mod2单芜,執(zhí)行..后層級變更為/src/lib
from sub.mod3 import * ? ? //sub和lib是同一個層級蜕该,故可采用sub.mod3的方式查找到文件