欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > 第三十天打卡

第三十天打卡

2025/6/1 19:39:08 来源:https://blog.csdn.net/weixin_64192256/article/details/148084754  浏览:    关键词:第三十天打卡
项目根目录/
├── 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

    @浙大疏锦行

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词