Python 常见问题与总结

python 运行脚本与运行模块

在如下的场景,工作目录为 root,python src/script.pypython -m src.script 有什么区别?这两种情况下如何 import 其他模块。

1
2
3
4
5
6
root/
├── src/
│ ├── script.py
│ ├── utils.py
├── helpers/
│ └── submodule.py

一些直接的结论有:

  • 运行脚本会把脚本所在目录(上述场景中的src)添加到 sys.path[0],运行模块都会将工作目录(对应上述场景的root)添加到 sys.path[0]
  • import 的模块必须在 sys.path 中,而 sys.path 是由 sys.path[0]PYTHONPATH 等决定的
  • 运行模块时会有包的上下文,而相对导入必须在包的上下文中进行(如 from .utils import some_function),且相对导入必须使用 from … import … 的形式,不能使用 import … 的形式