管理Python项目的工作目录和模块路径

前言

事因是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'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值