温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2023-03-09 15:56:55 来源:亿速云 阅读:168 作者:iii 栏目:开发技术

这篇文章主要介绍“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多模块引用由此引发的相对路径混乱问题怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI