В общем, вы не можете решить эту проблему без изменения восходящего потока, поэтому в случае возникновения таких ошибок вам необходимо попросить разработчиков библиотек переименовать соответствующие модули.
В вашем случае использование новой библиотеки ctypes должно помочь, так как на моей машине библиотека ctypes (версия 0.11.2) больше не определяет модуль Common
.
Обновление: Также я не совсем понимаю, почему возникнет такой конфликт. Насколько я понимаю, даже если обе библиотеки выставляют один и тот же модуль Common, они будут отображаться как Ctypes.Common vs Markup.Common. Не должно быть конфликта?
Ваше понимание более или менее верное. Однако есть несколько деталей, библиотека представляет собой набор единиц компиляции, каждый блок компиляции представляет собой набор модулей. Компиляционные модули в основном сопоставляются с файлами, например, если у вас есть файл common.ml
, тогда блок компиляции будет иметь имя common
. Библиотеки и единицы компиляции находятся в плоском пространстве имен, а модули обычно оставляют в иерархическом пространстве имен. Это означает, что имена файлов, из которых создаются библиотеки, должны иметь разные имена, поэтому, если вы посмотрите на последнюю кодовую базу, вы заметите, что все имена файлов имеют префикс с ctypes_
. Существует частичное решение, чтобы смягчить эту проблему с пространством имен, можно использовать упакованные модули, в этом случае только один модуль (обычно с тем же именем, что и библиотека).
Вам нужно будет сообщить о выходе. –