Python多模塊引用由此引發(fā)的相對路徑混亂問題
更新時間:2023年03月03日 08:33:19 作者:Likianta?Me
這篇文章主要介紹了Python多模塊引用由此引發(fā)的相對路徑混亂問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
多模塊引用由此引發(fā)的相對路徑混亂
當不同層級的 Python 模塊相互調用時,我們會發(fā)現(xiàn)原本在一個模塊中寫死的相對路徑會導致找不到文件的報錯。
這種問題該怎么解決呢?
先說結論
復制下面的代碼, 放到你的模塊內 (或者保存為一個 .py 文件), 調用 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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Selenium webdriver添加cookie實現(xiàn)過程詳解
這篇文章主要介紹了Selenium webdriver添加cookie實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
Appium+python自動化怎么查看程序所占端口號和IP
這篇文章主要介紹了Appium+python自動化怎么查看程序所占端口號和IP,本文以FQ工具 Lantern 為例,通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下2019-06-06
基于python SMTP實現(xiàn)自動發(fā)送郵件教程解析
這篇文章主要介紹了基于python實現(xiàn)自動發(fā)送郵件教程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
python 使用Yolact訓練自己的數(shù)據(jù)集
這篇文章主要介紹了python 使用Yolact訓練自己的數(shù)據(jù)集,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下2021-04-04

