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

    @浙大疏锦行

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

相关文章:

  • 3D几何建模引擎3D ACIS Modeler核心功能深度解读
  • ES(Elasticsearch) 基本概念(一)
  • 【Linux】初见,基础指令(续)
  • Linux第十一讲:信号
  • 构建自动收集并总结互联网热门话题的网站
  • 进程间通信(IPC)常用方式对比
  • 当PLC遇上电焊机器人:EtherCAT转CANopen上演工业级“语言翻译官”
  • DP2 跳台阶【牛客网】
  • [面试精选] 0001. 两数之和
  • 人工智能的“歧视”:“她数据”在算法运行中隐形
  • C46-二维数组与指针的总结
  • VUE3 中的 ResizeObserver 警告彻底解决方案
  • C#:多线程Task使用
  • c++使用protocol buffers
  • JS实现古诗竖排从右至左
  • 谈谈jvm的调优思路
  • c++学习方向选择说明
  • [软件工程]第二章题目汇总
  • MySQL 8.0窗口函数详解
  • 48、c# 中 IList 接⼝与List的区别是什么?
  • Gin--Blog项目-flags文件解析
  • RK3576 Android 14.0 SDK开发指南(第一集)
  • 丝杆升降机在锂电行业的自动化应用有什么?
  • Unity-编辑器扩展
  • 2025年护网行动蓝队防御全解析:构建智能动态防御体系
  • Raft算法学习(1)博士论文大纲
  • Go学习教程(附电子书资料)
  • 桥梁凝冰在线监测装置:科技守护道路安全的新防线
  • Python入门手册:Python简介,什么是Python
  • C++之fmt库介绍和使用(2)