当前位置: 首页 > news >正文

怎么有效管理项目路径(避免使用绝对路径)

怎么有效管理项目路径(避免使用绝对路径)

import os

使用 os.path 方法会自动处理不同操作系统的路径分隔符(如 \/

1.**current_dir = os.path.dirname(os.path.abspath(\__file__)) **

  • __file__ 获取当前脚本的文件路径(可能是相对或绝对路径)
  • os.path.abspath(__file__) 将路径转为绝对路径(确保路径是完整的)。
  • os.path.dirname(...) 提取脚本所在的目录路径。
  • 最终 current_dir 是当前脚本的所在目录的绝对路径。

假设train.py文件的绝对路径为D:/workspace/MambaIR/basicsr/utils/train.py
假设在D:/workspace/MambaIR/basicsr/下执行命令python ./utils/train.py则此时:
(python ./utils/train.pypython utils/train.py没啥区别)

  • __file__utils/train.py

假设在D:/workspace/MambaIR/basicsr/utils/下执行命令python train.py

  • __file__train.py

两种情况下只有__file__有区别,下面这两个没区别。

  • os.path.abspath(__file__)D:/workspace/MambaIR/basicsr/utils/train.py
  • os.path.dirname(...)D:/workspace/MambaIR/basicsr/utils

2.parent_dir = os.path.abspath(os.path.join(current_dir, '..'))

  • ..是上一级目录的意思。
  • parent_dir=D:/workspace/MambaIR/basicsr

from os import path as osp

3.root_path = osp.abspath(osp.join(__file__, osp.pardir, osp.pardir))

  • 这里的osp.pardir='..'
  • osp.abspath(osp.join(__file__, osp.pardir))=osp.abspath(osp.join(__file__, '..'))
  • root_path=D:/workspace/MambaIR

4.sys.path.append(parent_dir)

  • 目录路径添加到 Python 的模块搜索路径中
  • sys.path:这是 Python 用来搜索模块(.py 文件)的路径列表。当在代码中使用 import 时,Python 会按顺序在这些路径中查找对应的模块。
  • .append(parent_dir):将 parent_dir 添加到 sys.path 列表的末尾,使得 Python 也能从该目录中导入模块。

my_project/
├── scr/
| ├── main.py
└── utils/
├── init.py
└── helpers.py

如果在 main.py 中想导入 helpers.py,通常需要:from utils import helpers

但如果直接运行可能会报错 ModuleNotFoundError: No module named 'utils',因为 Python 默认只在以下位置搜索模块:

  • 当前脚本所在目录(也就是/myproject/scr),而utils在/myproject下。
  • Python 标准库目录(如 /usr/lib/python3.8
  • 第三方库目录(如 ~/.local/lib/python3.8/site-packages

通过 sys.path.append(parent_dir),显式地告诉 Python:“把 my_project/ 也加入模块搜索路径”。

  • 实例:
    若文件结构为:

Temporal-Color-Constancy-master/
├── auxiliary/ # 被添加的路径
│ ├── model.py
│ ├── dataset.py
│ └── …
└── test/
└── test_rccnet.py # 运行脚本

运行test_rccnet.py所使用的命令是:python ./test/test_rccnet.py

则可以通过在test_rccnet.py中使用sys.path.append('./auxiliary/')来实现from model import squeezenet1_1,CreateNet from dataset import *
注:因为python ./test/test_rccnet.py,所以./auxiliary/ 中的 ./ "当前目录"表示的是:Temporal-Color-Constancy-master/
注意,当前的目录是你cd到了哪个目录下,与你当前打开什么脚本,运行什么命令无关
在这里插入图片描述
比如说这张图片,当前的路径就是/run/

相关文章:

  • AI应用开发实战分享
  • 掌握Multi-Agent实践(一):使用AgentScope实践入门和Workstation上手指南
  • QT6 源(84):阅读与注释时间类型 QTime,源代码以及属性测试
  • 5.7线性动态规划1
  • Ubuntu 安装 Keepalived、LVS
  • ROS1和ROS2使用桥接工具通信
  • leeCode算法之独一无二出现次数
  • 自由浮动时间和总浮动时间对比
  • 贷中业务提额、降额策略
  • (eNSP)策略路由实验配置
  • Java中有哪些锁?
  • OpenShift AI - 模型注册管理
  • 绕线机的制作与研究
  • ‌人工智能在农作物病虫害识别中的应用前景分析
  • 【LUT技术专题】基于扩展卷积的极快速LUT算法
  • 如何快速获取旺店通奇门原始数据至本地
  • 嵌入式软件学习指南:从入门到进阶
  • STM32基础教程——软件SPI
  • Cadence 高速系统设计流程及工具使用二
  • 前端面经-VUE3篇(四)--pinia篇-基本使用、store、state、getter、action、插件
  • 哥伦比亚总统称将在访华期间签署“一带一路”倡议意向书,外交部回应
  • 央行将增加3000亿元科技创新和技术改造再贷款额度
  • 印度袭击巴基斯坦已致至少3人死亡
  • 以色列计划“占领加沙”,特朗普下周中东行结束之际将是“机会窗口”
  • 中年人多活动有助预防阿尔茨海默病
  • 黔西游船倾覆事故84名落水人员已全部找到,10人不幸遇难