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

    相关文章

    功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
    大体上把Python中的数据类型分为如下几类: Number(数字) ...
    开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
    源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
    前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
    python中常用的写爬虫的库有urllib2、requests,对于大多数比...