深入解析python项目引用运行路径

目录
  • python项目引用运行路径的问题
    • 获得当前文件的绝对路径
    • 获取父文件目录
    • 获取当前文件相对于 ROOT 的相对路径
    • 如何将run/tools/main文件的运行路径改为run/
  • 补充:Python引用路径

    python项目引用运行路径的问题

    获得当前文件的绝对路径

    Path(file).resolve() 是使用 pathlib 库获取当前 Python 脚本的绝对路径的方法。这里的 file 是一个内置变量,表示当前脚本的文件名。Path(file) 将这个文件名转换为一个 Path 对象,resolve() 方法将相对路径转换为绝对路径。

    FILE = Path(__file__).resolve()

    获取父文件目录

    ROOT = FILE.parents[0]  # YOLOv5 root directory

    获取当前文件相对于 ROOT 的相对路径

    这行代码将 ROOT 变量设为当前工作目录 Path.cwd() 相对于 ROOT 的相对路径os.path.relpath() 函数用于计算从 start 目录到 path 的相对路径。在这个例子中,start 目录是当前工作目录(Path.cwd()),path 是 ROOT。

    ROOT = Path(os.path.relpath(ROOT, Path.cwd()))  # relative

    如何将run/tools/main文件的运行路径改为run/

    os.path.abspath(file) 获取当前运行的脚本文件的绝对路径。
    os.path.dirname() 函数获取包含该文件的目录。最后,os.chdir() 函数更改当前工作目录到包含脚本文件的目录。
    os.getcwd() 获得相对路径

    import os
    import sys
    # Change the working directory to 'run/'
    os.chdir(os.path.dirname(os.path.abspath(__file__)))
    # Add 'run/tools/' to the import path
    sys.path.append(os.path.join(os.getcwd(), 'tools'))
    # Import and run the main function from 'run/tools/main.py'
    from main import main
    if __name__ == '__main__':
        main()

    补充:Python引用路径

    0、官方建议,总是优先使用绝对引用,只有在引用路径较为复杂导致引用代码很长时,才考虑使用相对引用。

    绝对引用
    优点是清晰且直接,可以很容易就确定引用文件位置;且即使当前文件的位置发生变化,导入语句仍然有效。
    缺点是当引用路径较为复杂时,导入语句很长,如:
    from package1.subpackage2.subpackage3.subpackage4.module5 import function6

    相对引用
    最直观的优点就是简洁,在包层次结构较为复杂时,相对引用能够借助于.以较短的代码实现快速的引用。
    缺点是较为凌乱,在项目文件位置发生变更时,不易维护;此外,相对引用可读性较差。较难根据引用代码确定引用文件路径。
    相对引用的限制:使用了相对引用的py文件,不能作为执行文件。需要在这个py路径之外的py文件调用。

    1、Windows:引用文件的目录是以当前执行文件为根目录去搜索的。

    Linux:引用文件的目录是以终端中的打开的文件夹为根路径去搜索的。

    2、其他文件内引用的相对路径文件可以使用项目根目录+相对路径的方式获得。

    1、project_name = 'crop_and_angle_classifier'  # 设置工作项目名称
    2、project_path = os.getcwd().split(project_name)[0] + project_name  #以此方式获得项目根目录
       备注:获取上一级目录的方式:os.path.dirname(BaseDir)
            或者__dir__ = pathlib.Path(os.path.abspath(__file__))
               sys.path.append(str(__dir__.parent.parent))
    3、sys.path.append(project_path)  #将项目根目录添加进搜索路径
    4、model_weight_path = project_path + "/weight/mobilenet_v3_large.pth" #在其他所有文件中采用这种方式获得所需文件的绝对路径

    3、跨目录调用py文件里的方法也是
      1、先将根目录添加进搜索路径    
      2、from 根目录下的文件 import 所需的方法

    4、在编写代码时候,只需要先确定一个根目录,即project path,然后,其它文件里面的引用from xxx import xxx时候,都是改为从根目录开始的引用。但是这时候会出现引用的文件下面有红线,即找不到文件,而且你在这个文件内直接运行也会报错,这是因为你运行的文件没有将项目根目录加进去,所以这时候只需利用方法2,将项目根目录加进去就可以顺利运行啦。

    到此这篇关于python项目引用运行路径的问题的文章就介绍到这了,更多相关python项目引用运行路径内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Python多模块引用由此引发的相对路径混乱问题
    • python实现引用其他路径包里面的模块
    • 对python当中不在本路径的py文件的引用详解
    • Python引用模块和查找模块路径

    Published by

    风君子

    独自遨游何稽首 揭天掀地慰生平

    发表回复

    您的电子邮箱地址不会被公开。 必填项已用 * 标注