拆分代码文件后导入的Python库未生效,函数调用报错如何解决?
解决Colab中导入模块后依赖未定义的问题
问题核心原因
helper_functions.py里的函数用到了np和boto3,但这个文件本身没有导入这些依赖,而是想依赖Notebook里通过libraries.py导入的变量。但Python模块有独立的命名空间,Notebook全局的变量不会自动共享给helper_functions模块,所以调用函数时会提示变量未定义。
推荐解决方案
方案1:让helper_functions自行管理依赖(最规范)
直接在helper_functions.py的开头添加所需依赖的导入,确保模块自身具备运行所需的全部依赖:
# helper_functions.py 开头添加 import boto3 import numpy as np # 下面是你的load_data等函数 def load_data(): # 这里使用np就不会报错了 data = np.array([1,2,3]) return data
这种方式让模块独立,不管在什么环境运行,只要安装了依赖就能正常工作,不需要依赖外部导入的变量。
方案2:手动将全局变量注入helper_functions模块
如果不想修改helper_functions.py,可以在Notebook里先导入依赖,再把全局变量注入到helper_functions的命名空间中:
- 先运行导入依赖的命令:
%run -i libraries.py - 接着导入helper_functions并注入变量:
import helper_functions # 将全局的np和boto3赋值给helper_functions模块的变量 helper_functions.np = np helper_functions.boto3 = boto3 - 最后再导入函数:
from helper_functions import *
方案3:修改libraries.py的导入方式(不推荐)
把libraries.py改成强制将变量导入到全局命名空间,再配合%run命令加载,但这种方式容易引发命名冲突,不建议长期使用:
修改libraries.py内容:
global boto3, np import boto3 import numpy as np
然后在Notebook里先运行%run -i libraries.py,再导入helper_functions的函数。
内容的提问来源于stack exchange,提问作者Wael
相关产品推荐
相关产品推荐

