Incorrect deserialization of subclasses, module changed to `types`
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Empieza ejecutando el script de reproducción del issue en el checkout actual de cloudpickle y, después, sigue la ruta de deserialización de las clases Parent y Child. Compara el module, la representación en cadena y el MRO resultantes con los valores esperados de main. La tarea estará terminada cuando la deserialización de subclases conserve el módulo y el MRO originales, con una prueba de regresión que cubra la reproducción.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
This issue is similar to #440 but I have verified it still happens after the fix (on latest master).
Somehow the deserialized subclass has __module__ of types instead of __main__. This also happen when the classes are moved to their separate files.
See the following repro script:
import cloudpickle
import multiprocessing as mp
print(cloudpickle.__version__)
class Parent:
pass
class Child(Parent):
pass
def get_mro(klass):
return [f"{base.__module__}.{base.__qualname__}" for base in klass.mro()]
def task(b: bytes):
cls = cloudpickle.loads(b)
return str(cls), get_mro(cls)
for klass in [Parent, Child]:
with mp.Pool() as pool:
cls_name, mros = pool.apply(task, (cloudpickle.dumps(klass),))
print()
print("local class name", str(klass))
print("deserialized class name", cls_name)
print()
print("local mro", get_mro(klass))
print("deserialized mro", mros)
My output on Python 3.7 f758eb34d1b3285dc582b73bfd8df4c47ed4fc68
2.1.0.dev0
local class name <class '__main__.Parent'>
deserialized class name <class '__main__.Parent'>
local mro ['__main__.Parent', 'builtins.object']
deserialized mro ['__main__.Parent', 'builtins.object']
local class name <class '__main__.Child'>
deserialized class name <class 'types.Child'>
local mro ['__main__.Child', '__main__.Parent', 'builtins.object']
deserialized mro ['types.Child', '__main__.Parent', 'builtins.object']
- Lenguaje dominante
- Python
- Estrellas
- 1.9k
- Forks
- 197
- Merge medio
- 1 d 10 h
- PR fusionados (30 d)
- 1
Preparar el entorno
Aún no hemos revisado los archivos de configuración de este proyecto. Empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de cloudpipe/cloudpickle
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
cloudpipe/cloudpickle#593 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 42/100
cloudpipe/cloudpickle#595 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
cloudpipe/cloudpickle#592 · 2 comentarios ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
cloudpipe/cloudpickle#589 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
cloudpipe/cloudpickle#587 ·
Todos los issues de cloudpipe/cloudpickle
Issues similares
-
good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
vllm-project/vllm-metal#822 ·
Los mantenedores suelen responder en 1 día
-
vector-store
Dificultad 1/5 1-3 horas Aptitud para principiantes 90/100
mem0ai/mem0#7461 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[Bug]: chunk_span_bounds and _validated_chunk_spans reject Pydantic models ChunkSpan and AudioFileAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
BasedHardware/omi#19047 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día