顶层导入是否优先于底层导入?Jupyter Notebook导入优先级及替换问题
问题解答
1. utils.py中的pd指向哪个库?
utils.py里的pd指向原生pandas库。Python的模块导入具有独立性,Notebook中import modin.pandas as pd只是在当前Notebook的命名空间里把modin.pandas别名为pd,不会影响utils.py内部的导入逻辑——utils.py里的import pandas as pd会独立加载原生pandas模块,并将其绑定到自身命名空间的pd变量上。
2. 能否不修改utils.py让它使用modin.pandas作为pd?
可以实现,核心思路是在导入utils之前,将modin.pandas注入到Python的模块缓存中,让import pandas语句直接加载modin.pandas。具体在Notebook中修改代码如下:
import sys import modin.pandas as pd # 将modin.pandas注册为系统模块中的"pandas" sys.modules["pandas"] = pd # 再导入utils,此时utils里的import pandas as pd会拿到modin的实现 import utils
这样utils.py内部执行import pandas as pd时,Python会优先从sys.modules中读取已注册的modin.pandas对象,而不会去加载原生pandas,从而实现不修改utils.py的前提下替换pd的指向。
内容的提问来源于stack exchange,提问作者piedpiper
相关产品推荐
相关产品推荐

