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

第三十天打卡

项目根目录/
├── circle2.py          # 普通模块文件
└── utils/              # 工具包(Python包)├── __init__.py     # 包标识文件└── circle.py       # 工具模块
└── model/              # 主程序目录└── main.py         # 主程序入口

关键问题:为什么直接运行 python model/main.py 会报错?

报错本质原因:Python的模块导入路径(sys.path)解析机制不同。


场景对比分析
运行方式sys.path 包含的路径模块查找范围能否找到 utils 包?
python model/main.py自动添加 model/ 目录的绝对路径只在 model 目录及其子目录查找❌ 找不到上级的 utils
python -m model.main自动添加 项目根目录 的绝对路径在整个项目根目录下查找✅ 可以正常找到

具体原理拆解

1. 直接运行脚本时的路径问题

当使用 python model/main.py 时:

  • Python会将 model/ 目录的绝对路径加入 sys.path

  • 此时所有导入语句都只能看到

    • model/ 目录下的文件

    • 系统标准库路径

  • 因此当 main.py 尝试导入 utils 包时:

    # 假设 main.py 中有如下导入
    from utils import circle  # 会报错 ModuleNotFoundError

    Python会在 model/ 目录下寻找 utils 包,但该包实际位于项目根目录,因此找不到。


2. 使用模块运行模式 (-m) 的优势

当使用 python -m model.main 时:

  • Python会将当前工作目录(即项目根目录)加入 sys.path

  • 此时所有导入语句可以看到

    • 项目根目录下的 utils 包

    • model/ 目录下的文件

  • 因此以下导入都能正常工作:

    from utils import circle    # 正确找到根目录下的 utils 包
    import circle2             # 正确找到根目录下的 circle2.py

    @浙大疏锦行

相关文章:

  • 【Java高阶面经】1.微服务架构核心:服务注册与发现之AP vs CP选型全攻略
  • 电子电器架构 --- 汽车高性能计算
  • 关于 APK 反编译与重构工具集
  • Spring Boot-Swagger离线文档(插件方式)
  • C++(3)
  • 鸿蒙开发进阶:深入解析ArkTS语言特性与开发范式
  • 关于 Web 漏洞原理与利用:3. CSRF(跨站请求伪造)
  • Python _day31
  • 第40天-Python开发音乐播放器完整指南
  • Java 10IO流
  • [Java] idea的调试介绍
  • P2670 [NOIP 2015 普及组] 扫雷游戏
  • 软件设计师考试三大核心算法考点深度解析(红黑树 / 拓扑排序 / KMP 算法)真题考点分析——求三连
  • centos7配置静态ip 网关 DNS
  • C++中的宏
  • 解码数据语言:如何优雅的进行数仓字典建设?
  • Web开发-Python应用Flask框架Jinja模版绑定路由参数传递页面解析SSTI注入
  • 协程+Flow:现代异步编程范式,替代RxJava的完整实践指南
  • PH热榜 | 2025-05-20
  • springboot框架 集成海康ISUP-SDK 并实现 协议透传给设备下发指令!
  • 中国建设银行原党委委员、副行长章更生被决定逮捕
  • B站一季度净亏损收窄99%:游戏营收大增76%,AI类广告收入增近4倍
  • 失智老人有两个儿子却欠费住养老院两年多,法检合力指定监护人
  • 存款利率、LPR同日下调,机构称对银行的影响偏正面
  • 2025年新季夏粮收购量将达到2000亿斤左右
  • 习近平:推进中国式现代化要继续把制造业搞好