Python 依赖库的引用问题,感觉没有合适的方法

查看 80|回复 4
作者:huluhulu   
总结来说,就是下面的引用关系:
项目 A 引用了开源代码 B 和 C 库,但是 B 用了 D 的 1.1 ,C 用了 D 的 2.0.
D 的 1.1 和 2.0 接口不兼容
怎么解决这个问题?感觉现有的 venv 解决方案都是为了不同开源库的隔离,而不是实现开源库之间的并存。
是不是目前最好的方法,只能自己修改 B 和 C ,让他们调用同一个版本的 D ?

引用, 开源, 开源库, venv

alexsz   
修改 B 适配新版 D
tabris17   
Dependency hell
如果版本冲突实在无法解决,只能拆成两个项目,或者在 B 和 C 舍弃其中一个
huluhulu
OP
  
很多 tensorflow 的开源代码,依赖版本要求特别严格。如果真要适配,需要很多改动,没办法开箱即用了。
头疼。
llh880808   
可以考虑使用 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
```
您需要登录后才可以回帖 登录 | 立即注册

返回顶部