如何无需修改PYTHONPATH,在Python脚本中导入外部参数文件?
无需修改PYTHONPATH加载外部参数文件的方法
以下两种方法可以满足你的需求,不需要修改环境变量:
方法一:直接读取参数文件内容执行(完全贴合"复制代码到脚本"的效果)
直接读取input.py的文件内容,通过exec执行,参数会直接进入当前脚本的命名空间,和把代码复制过来执行的效果完全一致:
import sys # 获取命令行传入的参数文件路径 inp_file = sys.argv[1] # 读取文件内容并执行 with open(inp_file, 'r', encoding='utf-8') as f: exec(f.read()) # 之后可直接使用input.py中定义的变量 # 示例:print(var)、print(my_list)
这种方式不需要考虑文件所在目录,只要命令行传入正确的路径(相对或绝对路径都行)即可,参数直接在当前脚本环境中可用。
方法二:用importlib规范加载参数模块(结构化管理参数)
如果希望参数被结构化管理,避免污染当前脚本命名空间,可以用importlib.util模块加载外部文件为模块,同样不需要修改PYTHONPATH:
import sys import importlib.util inp_file = sys.argv[1] # 根据文件路径创建模块规范 spec = importlib.util.spec_from_file_location("sim_params", inp_file) # 创建模块对象 sim_params = importlib.util.module_from_spec(spec) # 执行模块内容 spec.loader.exec_module(sim_params) # 通过模块对象访问参数 # 示例:print(sim_params.var)、print(sim_params.my_list)
这种方式会把input.py的内容封装到一个模块对象中,参数都作为模块的属性存在,更适合参数较多、需要清晰区分脚本自有变量和外部参数的场景。
内容的提问来源于stack exchange,提问作者nougako
相关产品推荐
相关产品推荐

