Есть ли способ обойти проблему импорта версии конфликта, вызванную 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 ответ

Решение

Не легко. Привязки действительно делают предположения о базовом API, представленном конкретной версией PyXB. Вероятно, есть какая-то магия, которую вы могли бы сделать, изменив метаданные модуля, чтобы позволить двум версиям сосуществовать, если документ не ссылается на привязки из обоих пространств имен.

К сожалению, сгенерированные привязки были изменены вручную. Во многих случаях использование инфраструктуры настройки PyXB устранит эту тесную связь, и в этом случае вы можете заново сгенерировать привязки и повторно использовать настройки, которые их накладывают.

Другие вопросы по тегам