Python多模塊引用由此引發(fā)的相對路徑混亂問題
更新時間:2023年03月03日 08:33:19 作者:Likianta?Me
這篇文章主要介紹了Python多模塊引用由此引發(fā)的相對路徑混亂問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
多模塊引用由此引發(fā)的相對路徑混亂
當不同層級的 Python 模塊相互調(diào)用時,我們會發(fā)現(xiàn)原本在一個模塊中寫死的相對路徑會導致找不到文件的報錯。
這種問題該怎么解決呢?
先說結論
復制下面的代碼, 放到你的模塊內(nèi) (或者保存為一個 .py 文件), 調(diào)用 relpath
函數(shù)即可.
def relpath(file): """ Always locate to the correct relative path. """ from sys import _getframe from pathlib import Path frame = _getframe(1) curr_file = Path(frame.f_code.co_filename) return str(curr_file.parent.joinpath(file).resolve())
運行效果
特點
- 不到 10 行代碼
- 無第三方庫依賴
- 使用簡單, 只需把原先寫死的相對路徑, 替換為 relpath({之前寫的路徑}) 即可
- 此外, Pycharm 還能夠識別到文件參數(shù), 在你鍵入時自動給出路徑提示
更復雜的情況演示
someprj |- relpath.py |- A |- a.py |- AA |- aa.py |- AAA |- aaa.py |- B |- b.txt
# A/a.py def show_path(): from relpath import relpath print(relpath('../B/b.txt')) if __name__ == '__main__': from A.AA import aa from A.AA.AAA import aaa show_path() # -> '/someprj/B/b.txt' aa.show_path() # -> '/someprj/B/b.txt' aaa.show_path() # -> '/someprj/B/b.txt' # A/AA/aa.py def show_path(): from relpath import relpath print(relpath('../../B/b.txt')) if __name__ == '__main__': from A import a from A.AA.AAA import aaa show_path() # -> '/someprj/B/b.txt' a.show_path() # -> '/someprj/B/b.txt' aaa.show_path() # -> '/someprj/B/b.txt' # A/AA/AAA/aaa.py def show_path(): from relpath import relpath print(relpath('../../../B/b.txt')) if __name__ == '__main__': from A import a from A.AA import aa show_path() # -> '/someprj/B/b.txt' a.show_path() # -> '/someprj/B/b.txt' aa.show_path() # -> '/someprj/B/b.txt'
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python中raise用法簡單實例(超級詳細,看了無師自通)
python中raise語句用于手動觸發(fā)異常,通過raise語句可以在代碼中顯式地引發(fā)異常,從而使程序進入異常處理流程,下面這篇文章主要給大家介紹了關于Python中raise用法的相關資料,需要的朋友可以參考下2024-03-03pytest官方文檔解讀fixtures的調(diào)用方式
這篇文章主要為大家介紹了pytest官方文檔解讀fixtures的調(diào)用方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06