网络编程
位置:首页>> 网络编程>> Python编程>> Python多模块引用由此引发的相对路径混乱问题

Python多模块引用由此引发的相对路径混乱问题

作者:Likianta?Me  发布时间:2021-07-11 03:57:10 

标签:Python,多模块,相对路径,混乱

多模块引用由此引发的相对路径混乱

当不同层级的 Python 模块相互调用时,我们会发现原本在一个模块中写死的相对路径会导致找不到文件的报错。

这种问题该怎么解决呢?

先说结论

复制下面的代码, 放到你的模块内 (或者保存为一个 .py 文件), 调用 relpath 函数即可.

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())

运行效果

Python多模块引用由此引发的相对路径混乱问题

特点

  • 不到 10 行代码

  • 无第三方库依赖

  • 使用简单, 只需把原先写死的相对路径, 替换为 relpath({之前写的路径}) 即可

  • 此外, Pycharm 还能够识别到文件参数, 在你键入时自动给出路径提示

Python多模块引用由此引发的相对路径混乱问题

更复杂的情况演示

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'

来源:https://blog.csdn.net/Likianta/article/details/89299937

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com