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