背景
最近在運(yùn)用Django和pytest框架的時(shí)候,需要跨文件引用函數(shù)和類,現(xiàn)匯總各種場(chǎng)景下引用文件的方法。
直接跨文件引用
1.同一個(gè)文件夾兩個(gè)不同文件間引用
-- src
|-- mod1.py
|-- mod2.py
文件mod2想要引用文件mod1內(nèi)的函數(shù)/類:from .mod1 import *
PS.不使用框架的時(shí)候,可移除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的方式引用
建議采用相對(duì)路徑的方式,比絕對(duì)路徑要更好,不會(huì)受限文件路徑變更
相對(duì)路徑的里面:.代表同一級(jí);..代表上一級(jí)
以不同文件夾跨文件引用為例
文件mod2想要引用文件mod3內(nèi)的函數(shù)/類:
需要在文件mod2頭部增加如下代碼
import sys
sys.path("..") ? ? ? ? ? ? ? ? ? ? ? ? ?//目前文件所在層級(jí)/src/lib/mod2,執(zhí)行..后層級(jí)變更為/src/lib
from sub.mod3 import * ? ? //sub和lib是同一個(gè)層級(jí),故可采用sub.mod3的方式查找到文件