如何在Python主文件中运行另一文件代码,如同代码内置其中?
在Python中运行另一个文件的代码(效果如同内联编写)
这个需求完全可行,Python有两种常用方法实现,具体操作如下:
方法一:用exec()直接执行文件内容
这种方式会把第二个文件的代码当作当前文件的一部分执行,完全符合“如同直接写在第一个文件里”的效果。
假设第一个文件是main.py,第二个是utils.py,在main.py里加这段代码:
with open('utils.py', 'r', encoding='utf-8') as f: exec(f.read())
运行main.py时,utils.py里的所有代码都会在main.py的全局环境中执行,里面的变量、函数、类都能直接在main.py里用,包括if __name__ == '__main__':块里的代码也会被执行。
方法二:用from ... import *全导入模块内容
如果第二个文件符合Python模块命名规范(文件名无特殊字符),可以用全导入把所有内容拉到当前文件的命名空间里:
from utils import *
这样utils.py里所有非下划线开头的变量、函数、类都会被导入到main.py里,使用起来和内编写的差不多。但要注意两点:
utils.py里的if __name__ == '__main__':块不会被执行(因为导入时模块的__name__是模块名,不是__main__)- 如果
main.py和utils.py有同名的变量或函数,utils.py里的会覆盖掉main.py里的
两种方法的差异
exec()每次运行都会重新读取utils.py的最新内容,适合需要动态加载的场景;import会缓存模块,修改utils.py后需要重启程序,或者用importlib.reload()重新加载。exec()会执行目标文件里的所有代码(包括main块),而import只会执行模块级别的代码,跳过main块。
内容的提问来源于stack exchange,提问作者Zuuki
相关产品推荐
相关产品推荐

