You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行Python文件时python -m path.to.file与python path/to/file.py的区别

Python两种执行命令的核心差异
  • 模块搜索路径处理逻辑不同
    • 执行 python path/to/file.py 时,Python会将脚本文件所在的目录添加到sys.path的首位,优先从该目录下查找依赖模块
    • 执行 python -m path.to.file 时,Python会将执行命令时的当前工作目录添加到sys.path的首位,随后按照标准模块导入规则查找目标模块
  • 对运行目标的要求不同
    • python path/to/file.py 仅要求目标是后缀为.py的Python脚本即可,不需要目标所在目录符合Python包结构,路径按照文件系统规则用斜杠分隔,必须加.py后缀
    • python -m path.to.file 要求目标是合法的Python模块路径,用点分隔层级,不能加.py后缀,目标对应的路径需要符合Python包结构要求;同时该方式还可以直接运行内置模块、已安装的第三方模块,比如python -m pip不需要本地存在pip.py文件即可执行
  • 内置变量赋值不同
    • 两种方式运行时目标文件的__name__变量都会被设置为__main__,但python path/to/file.py运行时脚本的__package__变量会被赋值为None,python -m运行时模块的__package__变量会被正确赋值为对应的包名
  • 相对导入支持不同
    • 直接运行包内的脚本python path/to/package/module.py时,因为__package__为空,Python会将脚本识别为顶层文件,无法使用相对导入导入同包内的其他模块,会抛出ImportError: attempted relative import with no known parent package错误
    • 用python -m path.to.package.module运行时,__package__被正确赋值,包内的相对导入可以正常生效

举个实际场景示例:
现有如下包结构

my_project/
├── my_package/
│   ├── __init__.py
│   ├── module_a.py
│   └── module_b.py

如果module_b.py中写了相对导入代码from . import module_a,在my_project目录下执行:

  • python my_package/module_b.py 会直接抛出相对导入错误
  • python -m my_package.module_b 可以正常运行

内容的提问来源于stack exchange,提问作者user14577621

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:15:03