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將消除緊密耦合,在這種情況下,您可以重新生成綁定並重新使用覆蓋它們的自定義。