深入解析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项目引用运行路径内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!