Импорт двух привязок pyxb с конфликтующими элементами в одно и то же пространство имен - PullRequest
0 голосов
/ 01 октября 2019

У меня есть несколько файлов XSD, из которых мы сгенерировали привязки python с pyxb (1.2.6). Каждый из этих файлов XSD использует одно и то же пространство имен. Некоторые из них определяют элементы с одинаковыми именами (MyNamedElement). В результате одновременного импорта двух таких привязок выдается следующая ошибка:

pyxb.exceptions_.NamespaceUniquenessError: my:NAMESPACE: name MyNamedElement used for multiple values in elementBinding

Мне не нужно использовать две привязки одновременно, поэтому достаточно просто очистить pyxb. внутренний кэш пространства имен, если это возможно.

Есть ли способ сделать это, или какая-то другая магия питонов, чтобы обойти эту проблему? На данный момент моя лучшая идея - использовать подпроцессы, которые выполняют импорт и, надеюсь, снова потеряют их после завершения, st pyxb не будет жаловаться.

Еще один вопрос здесь о SO имеет ту же ошибку, ноОказалось, что это вызвано другой проблемой: PyXB: две версии XSD с одинаковым пространством имен

1 Ответ

0 голосов
/ 02 октября 2019

Для тех, у кого такая же проблема, здесь не решение, а обходной путь. Если следующие операции импорта выдают pyxb.exceptions_.NamespaceUniquenessError

import xml_binding_a
import xml_binding_b

, вы можете добавить подпроцессы, которые обрабатывают импортированные модули отдельно

from multiprocessing import Process

def work_with_binding_a():
    import xml_binding_a
    # ...do more stuff here...

def work_with_binding_b():
    import xml_binding_b
    # ...do more stuff here...


p = Process(target=work_with_binding_a)
p.start()
p.join()

p = Process(target=work_with_binding_b)
p.start()
p.join()
...