Хорошо - похоже, что укроп имеет 2 класса поведения маринования - в одном из них он пытается привязать класс к его объявлению в исходном модуле, а с другой, он переключается на видимый create_type
операнд внутри самой колодки Pickle.
Я мог бы переключиться на второй модуль, перезаписав __module__
атрибут класса "__main__"
перед травлением - давайте попробуем:
def moduleA.fun2():
new_cls = moduleB.fun()
new_cls.__module__ = "__main__"
new_cls.__qualname__ = new_cls.__name__.split(".")[-1]
obj = new_cls("Object of new class")
dill.dump(obj, open("test.obj","wb"))