python -m <模块名>按模块名搜索并运行,自动处理sys.path和相对导入。
核心原理
python -m <模块名> 将指定模块以脚本方式运行:
- 按
sys.path搜索模块 - 将模块所在目录加入
sys.path前端 - 设置
__name__ = "__main__"
-m vs 直接运行
| 方式 | 命令 | sys.path | 相对导入 |
|---|---|---|---|
-m | python -m module | 模块目录 | ✅ 正常 |
| 直接运行 | python script.py | 当前目录 | ❌ 可能失败 |
典型用法
# 运行标准库模块
python -m http.server 8000
python -m pip install --upgrade pip
# 运行调试器
python -m debugpy --listen 5678 script.py
# 运行自定义包
python -m my_package相对导入问题
my_project/
├── main.py
└── utils/
└── helper.py# main.py
from .utils.helper import func # 相对导入# ❌ 直接运行失败
python main.py # ImportError
# ✅ -m 运行成功
cd .. && python -m my_project.mainsys.path 说明
import sys
print(sys.path)
# ['', '/usr/lib/python3.10', ..., 'site-packages']'':当前目录- 标准库路径
- 第三方库路径
总结
-m按模块名查找,支持相对导入- 直接运行按文件路径,当前目录加入
sys.path - 包需要
__main__.py才能被-m运行