如何在不修改PyPI包源码时将pkg.a.b.c.d.fcn改为pkg.fcn调用?
实现
pkg.fcn形式调用深层导入的函数(无需修改包源码) 当然可以,不用改动包的源码或目录结构,只需要在你的代码里做简单的绑定操作就行,有两种常用方式:
直接导入绑定
先导入pkg模块本身,再导入目标函数,最后把函数赋值给pkg模块的属性:
import pkg from pkg.a.b.c.d import fcn # 把fcn绑定到pkg模块上 pkg.fcn = fcn
之后你就可以直接用pkg.fcn()来调用这个函数了。
动态导入绑定(适合路径较长的场景)
如果函数所在的层级很深,用importlib动态导入模块再绑定,写法更简洁:
import pkg import importlib # 动态导入包含fcn的模块 target_module = importlib.import_module('pkg.a.b.c.d') # 将函数绑定到pkg模块 pkg.fcn = target_module.fcn
注意事项
- 这种绑定只在当前脚本/运行会话中生效,不会修改包的实际文件,重启后需要重新执行绑定操作。
- 如果pkg模块本身已经有一个名为
fcn的属性,绑定后会覆盖原有属性,建议绑定前用hasattr(pkg, 'fcn')检查一下。
内容的提问来源于stack exchange,提问作者swoutch
相关产品推荐
相关产品推荐

