有没有办法解决由Pyxb引起的导入版本冲突离子问题

时间:2014-10-07 19:22:24

标签: python pyxb

我有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

有这样的工具吗?或者在这种情况下我可以使用其他解决方法吗?

1 个答案:

答案 0 :(得分:1)

不容易。绑定确实对特定版本的PyXB提供的底层API做出了假设。只要没有文档引用两个命名空间的绑定,您可以通过修改模块元数据以允许两个版本共存来实现一些魔力。

不幸的是,生成的绑定是手动修改的。在许多情况下,使用PyXB customization infrastructure将消除紧密耦合,在这种情况下,您可以重新生成绑定并重新使用覆盖它们的自定义。