引言:
# 脚本方式执行
python run.py# 模块方式执行
python -m run
个人使用总结:
借助“python -m 模块名”的执行方式,可以简化import导入其他package中文件的步骤:在import导入其他package中文件时,只需要所需要文件的相对路径。
(1)"python --help"中的定义
-m mod : run library module as a script (terminates option list)
以脚本方式运行Python模块(把python模块当做script方式执行,python文件=python模块名+".py")
python官网中的示例:
python -m http.server 8000
python -m pydoc -p xxx
python -m pdb xxx.py
python -m timeit "'$'.join(str(n) for n in range(10))"
python -m pip install xxx
(2)作用
把“当前完整模块的所在路径”添加到sys.path,在后续执行命令时,python解析器会自动“所有模块命名空间”中查找所需要的全部模块。
省去查找模块时间和反复import其他模块的麻烦。
(3)执行流程
Python检索sys.path,查找名字为指定名字的模块或者包,并将其内容当成"__main__"模块执行
(4)效果
- 对于单个py文件,在该py文件所在目录执行"python 文件名.py"和"python -m 文件名.py"的程序结果一致,但返回的sys.path不一致,见下图。
即:python run.py方式,解释器会将run.py文件所在的路径添加到sys.path;而python -m run方式,解释器会将当前执行命令所在路径(.号表示)添加到sys.path。
- 对于单个py文件,在该py文件所在上级(或者上上级)目录执行时,执行命令中需要写全该py模块的相对路径,但py文件中不用写全引入模块的路径。
- 对于package,在package中新建一个__main__文件,执行命令"python -m package"相当于指定"python -m package.__main__",效果如下图所示。
补充说明:python文件中常用的import,导入的是模块(不带.py后缀)。
python导入模块的搜索先后顺序
(1)内建模块
(2)sys.path列表
- 当前程序的根目录(即当前运行python文件的目录)
- PYTHONPATH环境变量设置的目录
- 标准库的目录
- 任何能够找到的*.pth文件的内容
- 第三方扩展的site-package目录
python文件如何执行
(1)首次加载运行流程
py纯文件对象(内存) -> PyCodeObject对象(内存) -> pyc文件(磁盘)
(2)存在pyc文件时的运行流程
pyc文件(磁盘) -> PyCodeObject对象(内存)
-- over --