【发布时间】:2019-09-07 21:32:01
【问题描述】:
这不是问题的重复:
Import python packages with different versions installed
virtualenv/pipenv也无法解决:同名/路径但代码/版本不同的包必须安装在同一环境下才能使程序正常运行
考虑以下经典的菱形依赖问题:
- 程序
- 程序
假设我们对包“program”、“feature_A”和“feature_B”的源代码具有完全访问权限,并且 feature_A 和 feature_B 都具有以下代码:
import library.*
在 virtualenv、pip 和 conda 等常规包管理器中,上述情况将阻止 feature_A 和 feature_B 在同一个项目中使用。但是由于python是一种解释性语言,我们可以使用feature_A和feature_B的源代码。应该可以做到以下几点:
-
摄取
李>library (v1.0)和library (v2.0)的包源/字节码,为每个生成2个加密哈希,并将它们安装在2个不同的路径下,这取决于它们各自的哈希值。 使用代码生成器重写
feature_A和feature_B,以便它们从依赖于加密哈希的新路径导入,并安装重写后的版本。使用代码生成器重写
program,使其从安装了重写的feature_A和feature_B的新路径导入。
现在我的问题是:完全自动化这个过程有多难?需要弱人工智能吗?还是可以用纯函数逻辑来完成?
【问题讨论】:
-
我会继续问,
Assuming we have full access over the sourcecode of packages 'program', 'feature_A', and 'feature_B'... 如果是这种情况,为什么不重组你的代码让你的生活更轻松? (例如,from library.v1 import func as funcv1;from library.v2 import func as funcv2?) -
好的,看来您没有可以控制
library,对吧?我的误解。 -
您也可以在加载特定功能时尝试模拟导入。
标签: python dependency-management package-managers