如何通过调用启动脚本将模块导入当前Python运行环境?
问题原因
你之前的实现中,通过importlib加载的启动脚本内容会被封装在独立的模块命名空间my_mod中,不会自动同步到主脚本的全局作用域,因此全局环境找不到modules_imported标记变量和pd等导入的模块。
修复方案
你可以任选以下两种方法之一实现启动脚本内容注入当前全局环境:
注意:两种方法都会覆盖当前全局环境中与启动脚本重名的变量/模块,建议提前做好命名冲突规避。
方法1:基于importlib实现(兼容模块缓存逻辑)
仅需在原有代码末尾添加一行将模块属性同步到全局的逻辑即可,修改后的主脚本代码如下:
# 导入基础依赖 import importlib # 运行启动脚本 if 'modules_imported' not in globals(): start_up_script = importlib.util.spec_from_file_location( name="mod_name", location="/home/solebay/project/module_script.py" ) my_mod = importlib.util.module_from_spec(start_up_script) start_up_script.loader.exec_module(my_mod) # 新增:将启动脚本的所有属性同步到当前全局环境 globals().update(my_mod.__dict__)
方法2:直接执行脚本代码(更简洁)
如果不需要保留独立的模块对象,可以直接读取脚本内容用exec运行,直接指定全局命名空间即可:
if 'modules_imported' not in globals(): with open("/home/solebay/project/module_script.py", "r", encoding="utf-8") as f: # 直接在当前全局命名空间执行启动脚本代码 exec(f.read(), globals())
效果验证
修改后运行你的测试用例,会输出如下结果:
Setup script finsihed! Modules script: successfully run! Pandas commands: functioning!
内容的提问来源于stack exchange,提问作者Solebay Sharp
相关产品推荐
相关产品推荐

