总结来说,就是下面的引用关系: 项目 A 引用了开源代码 B 和 C 库,但是 B 用了 D 的 1.1 ,C 用了 D 的 2.0. D 的 1.1 和 2.0 接口不兼容 怎么解决这个问题?感觉现有的 venv 解决方案都是为了不同开源库的隔离,而不是实现开源库之间的并存。 是不是目前最好的方法,只能自己修改 B 和 C ,让他们调用同一个版本的 D ? 引用, 开源, 开源库, venv
可以考虑使用 monkey patch 在模块 A 中重新实现 b 中的 call_foo 方法,就不会报错了 (记得空格会被吞,以下用.代替行首空格了) ```python # file a.py import b import c from d import foo def call_foo(): ....# 重新实现 call_foo 方法 ....foo(3, 4, 5) # 修改 b 的 call_foo 方法 b.call_foo = call_foo b.call_foo() c.call_foo() # file b.py from d import foo def call_foo(): ....# 模拟调用 1.x 版本 d.foo(),传两个参数 ....foo(1, 2) # file c.py from d import foo def call_foo(): ....# 模拟调用 2.x 版本 d.foo(),传三个参数 ....foo(1, 2, 3) # file d.py # 模拟实现 2.x 版本 d.foo(),必须传三个参数 def foo(a, b, c): ....pass ```