多库间共享小段代码 如何避免重复维护或新增公共依赖?
可行解决方案
- 代码生成同步脚本
把通用代码片段整理为模板文件,编写一个轻量化的本地同步脚本,配置好所有需要用到这些代码的仓库路径。需要更新通用代码时,只需修改一次模板,运行脚本即可自动将最新代码同步到所有目标仓库的对应位置,还可以增加冲突检测逻辑,避免覆盖各仓库的自定义修改,比手动拷贝维护成本低很多。 - 无依赖单文件分发
将所有通用逻辑整理到单个没有任何第三方依赖的独立代码文件中,比如你给出的三类代码可以统一放到common_base.py文件中:
各个仓库直接引入该单文件即可使用所有通用能力,更新时全量替换这个文件即可完成同步,既不会引入额外的依赖树,维护成本也远低于零散拷贝多段代码。import abc from enum import IntFlag class MyFlag(IntFlag): TRAIN = 1 EVAL = 2 class MyException(BaseException): pass class MyType(abc.ABCMeta): @abc.abstractmethod def mandatory_method(self): pass - 可选依赖+降级兼容方案
如果可以接受轻量的可选依赖,可将通用代码打包为独立的公共库,在各个业务库中写兼容逻辑:优先尝试导入公共库的实现,导入失败时自动 fallback 到本地内置的备用实现。公共库作为可选依赖不会强制用户安装,也不会导致各个业务库产生强制依赖绑定,维护时只需更新公共库和自动同步各仓库的备用实现代码即可。 - 命名空间运行时自动注册
利用Python的命名空间包特性,将通用类统一注册到公共命名空间下。各个仓库初始化时先检查命名空间中是否存在对应类,不存在则自动注册当前仓库的实现,多个仓库的实现不会产生冲突,也不需要互相依赖。
内容的提问来源于stack exchange,提问作者Jav
相关产品推荐
相关产品推荐

