3

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

因此,目前,项目 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

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

4

1 回答 1

1

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

不幸的是,生成的绑定是手动修改的。在许多情况下,使用 PyXB 的定制基础设施会消除这种紧密耦合,在这种情况下,您可以重新生成绑定并重新使用覆盖它们的定制。

于 2014-10-09T00:15:44.343 回答