Python 模块的定位和执行 (runpy)


命令行选项的 –m 选项搜索给定的模块并将其作为 __main__ 模块执行。此机制由 Python 标准模块中的 runpy 模块内部支持,该模块允许使用 Python 模块命名空间而不是文件系统来定位脚本。

此模块定义了两个函数

run_module()

此函数执行指定模块的代码并返回生成的模块全局字典。

mod_name 参数应该是绝对模块名。如果模块名指的是包而不是普通模块,则导入该包,然后执行该包中的 __main__ 子模块,并返回生成的模块全局字典。

在执行模块代码之前,会在全局字典中设置特殊的全局变量 __name__、__spec__、__file__、__cached__、__loader__ 和 __package__。

如果命名模块是包,则 __name__ 设置为 mod_name + '.__main__',否则设置为 mod_name 参数。

__file__、__cached__、__loader__ 和 __package__ 根据模块规范正常设置。

run_path()

此函数执行给定路径下文件的代码,并返回生成的模块全局字典。提供的路径可以指 Python 源文件、编译后的字节码文件或包含 __main__ 模块的有效 sys.path 条目(例如,包含顶级 __main__.py 文件的 zip 文件)。

在执行模块代码之前,会在全局字典中设置特殊的全局变量 __name__、__spec__、__file__、__cached__、__loader__ 和 __package__。

如果此可选参数不为 None,则 __name__ 设置为 run_name,否则设置为 ''。

示例

将以下脚本保存为 runpyeample.py

#runpy example
def add(x,y):
   return x+y
def main():
   x,y = 10,20
   print (add(x,y))
   return
if __name__=='__main__':
   main()

执行上述示例的通常过程如下

>>> import runpyexample as rp
>>> rp.main()
30
>>>

但是,我们现在使用 runpy 模块来执行它,而无需实际导入它。

>>> import runpy
>>> runpy.run_module('runpyexample', run_name='__main__')
30

您也可以使用 run_path() 函数。

>>> runpy.run_path('runpyexample.py', run_name='__main__')
30

如前所述,runpy 支持 Python 命令行的 –m 开关。

E:\python37>python -m runpyexample
30

更新于:2020年6月30日

3K+ 次浏览

启动您的 职业生涯

完成课程获得认证

开始
广告
© . All rights reserved.