我有3个python项目。项目A,项目B和项目C.项目C取决于项目A和项目B
Project C --- depends ---> Project A
Project C --- depends ---> Project B
项目A和项目B都依赖PyXB,他们使用一些生成的模式模块。不幸的是,项目A使用PyXB 1.2.2,而项目B使用PyXB 1.2.3
Project A --- depends ---> PyXB 1.2.2
Project B --- depends ---> PyXB 1.2.3
如果你阅读这些模块,你会看到
# Version of PyXB used to generate the bindings
_PyXBVersion = '1.2.3'
# Generated bindings are not compatible across PyXB versions
if pyxb.__version__ != _PyXBVersion:
raise pyxb.PyXBVersionError(_PyXBVersion)
和
# Version of PyXB used to generate the bindings
_PyXBVersion = '1.2.2'
# Generated bindings are not compatible across PyXB versions
if pyxb.__version__ != _PyXBVersion:
raise pyxb.PyXBVersionError(_PyXBVersion)
因此,目前,Project C存在版本冲突问题
Project C --- depends ---> PyXB 1.2.2
^
|
X conflict
|
v
Project C --- depends ---> PyXB 1.2.3
由于这些模式模块是手动修改的。很难重新生成它们并应用相同的修改。所以我想知道是否可以在Python中导入具有不同版本的相同模块。例如,我设想可能类似
with import_routing('pyxb', '..packages.pyxb1_2_3'):
import project_a
有这样的工具吗?或者在这种情况下我可以使用其他解决方法吗?
答案 0 :(得分:1)
不容易。绑定确实对特定版本的PyXB提供的底层API做出了假设。只要没有文档引用两个命名空间的绑定,您可以通过修改模块元数据以允许两个版本共存来实现一些魔力。
不幸的是,生成的绑定是手动修改的。在许多情况下,使用PyXB customization infrastructure将消除紧密耦合,在这种情况下,您可以重新生成绑定并重新使用覆盖它们的自定义。