当前位置: 首页 > 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/

http://www.xdnf.cn/news/320545.html

相关文章:

  • 如何避免项目结束后知识流失
  • 设计一个分布式系统:要求全局消息顺序,如何使用Kafka实现?
  • LeetCode 347 前 K 个高频元素
  • 【LUT技术专题】基于扩展卷积的极快速LUT算法
  • 【论文阅读】Harnessing the Power of LLM to Support Binary Taint Analysis
  • 浅聊find_package命令的搜索模式(Search Modes)
  • 一种扫描雷达超分辨成像检测一体化方法——论文阅读
  • [20250507] AI边缘计算开发板行业调研报告 ​​(2024年最新版)​
  • JNDI 注入原理解析
  • 力扣HOT100之链表:146. LRU 缓存
  • 信息论12:从信息增益到信息增益比——决策树中的惩罚机制与应用
  • 三角网格减面算法及其代表的算法库都有哪些?
  • “430”“531”光伏政策变革下,安科瑞如何 “保驾护航”?
  • Oracle OCP认证考试考点详解083系列11
  • windows10系统:如何使用电脑控制手机上多个应用程序(app)?
  • Oracle Goldengate并行复制
  • JS进阶DAY2 构造函数数据常用函数
  • 基于深度学习的交通标志识别系统
  • 如何根据HardFault中断抛出的寄存器值排查数组越界
  • 【EasyPan】loadDataList方法及checkRootFilePid方法解析
  • 阿里云服务器-宝塔面板安装【保姆级教程】
  • 如何将B站(哔哩哔哩)的视频下载到电脑
  • 二叉查找树,平衡二叉树(AVL),b树,b+树,红黑树
  • 实验一:Linux静态路由
  • 如何利用 Elastic Load Balancing 提升应用性能与可用性?
  • VScode一直处于循环“正在重新激活终端“问题的解决方法
  • 软件设计师2025
  • 隐私计算技术及其在数据安全中的应用:守护数据隐私的新范式
  • Word如何制作三线表格
  • ABB机器人基础课件及培训视频教程