前言
事因是YOLOv5项目外头添加一个文件夹,导致项目无法编译
最终发现罪魁祸首是大部分每个文件都加了这个标识
以下文章主要用于学习总结用,对此直奔主题
1. os 和 sys
import os
import sys
# 获取当前文件所在的绝对路径
project_path = os.path.abspath(os.path.dirname(__file__))
# 切换工作目录到当前文件所在的目录
os.chdir(project_path)
print('工作目录:', project_path)
# 将当前目录添加到系统路径的开头
sys.path.insert(0, project_path)
2. pathlib 和 sys
此处为YOLOv5常用格式
from pathlib import Path
import sys
import os
# 获取当前文件的绝对路径
FILE = Path(__file__).resolve()
# 获取当前文件所在目录(YOLOv5 根目录)
ROOT = FILE.parents[0]
# 如果 ROOT 不在 sys.path 中,则添加 ROOT 到 sys.path
if str(ROOT) not in sys.path:
sys.path.append(str(ROOT))
# 将 ROOT 转换为相对于当前工作目录的相对路径
ROOT = Path(os.path.relpath(ROOT, Path.cwd()))
3. 拓展
-
os.path.abspath()
可以将相对路径转换为绝对路径 -
工作目录(Current Working Directory, CWD):
使用os.getcwd()
可以获取当前工作目录
使用os.chdir()
可以更改当前工作目录 -
模块搜索路径:
sys.path 是一个列表,包含了 Python 查找模块时会搜索的目录
可以使用sys.path.append()
或sys.path.insert()
动态添加搜索路径 -
Pathlib 模块:
Path.cwd()
获取当前工作目录
Path(__file__).resolve()
获取当前文件的绝对路径
Path.parent
获取父目录
测试Demo如下:
import os
import sys
from pathlib import Path
# 获取当前工作目录
current_working_directory = os.getcwd()
print('当前工作目录:', current_working_directory)
# 获取当前文件的绝对路径
file_path = Path(__file__).resolve()
print('当前文件路径:', file_path)
# 获取文件所在目录的父目录
project_root = file_path.parents[0]
print('项目根目录:', project_root)
# 切换工作目录
os.chdir(project_root)
print('切换后的工作目录:', os.getcwd())
# 添加项目根目录到 sys.path
if str(project_root) not in sys.path:
sys.path.append(str(project_root))
# 使用 pathlib 操作路径
data_dir = project_root / 'data'
config_file = data_dir / 'config.yaml'