微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

这篇文章主要介绍“Python多模块引用由此引发的相对路径混乱问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“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'

    关于“Python多模块引用由此引发的相对路径混乱问题怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程之家行业资讯频道,小编每天都会为大家更新不同的知识点。

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

    相关推荐