2014-10-07 74 views
2

我有3个python项目。项目A,项目B和C.项目项目C依赖于,项目A和B有什么办法可以解决Pyxb导致的版本冲突问题

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) 

所以,目前项目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

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

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

相关问题