Nachdem eine Klassendefinition durch Neukompilieren eines Skripts aktualisiert wurde, verweigert die Beize das vorherige Serialisieren zuvor instantiierter Objekte dieser Klasse und gibt den Fehler: "Kann kein Objekt pürieren: Es ist nicht dasselbe Objekt wie "Python-Beize: Umgang mit aktualisierten Klassendefinitionen
Gibt es eine Möglichkeit, Pickle zu sagen, dass es solche Fälle ignorieren sollte? Um nur Klassen nach Namen zu identifizieren, ignorieren Sie die interne eindeutige ID, die die Nichtübereinstimmung verursacht.
Ich würde definitiv als Antwort die Anregung eines alternativen, äquivalenten Moduls begrüßen, das dieses Problem in einer bequemen und robusten Weise löst.
Als Referenz ist hier meine Motivation:
ich eine hohe Produktivität, Umwelt schnelle Iteration Entwicklung erschaffe, in der Python-Skripte Live bearbeitet werden. Skripts werden wiederholt neu kompiliert, aber Daten bleiben über Kompilierungen erhalten. Als Teil der Produktivitätsziele versuche ich Pickle für die Serialisierung zu verwenden, um die Kosten für das Schreiben und Aktualisieren von explizitem Serialisierungscode für sich ständig ändernde Datenstrukturen zu vermeiden.
Meistens serialisiert ich eingebaute Typen. Ich achte darauf, bedeutungsvolle Änderungen in den Klassen zu vermeiden, die ich pickele, und wenn nötig, benutze ich den Mechanismus copy_reg.pickle, um die Aufwärtskonvertierung beim Unpickle durchzuführen.
Die Neukompilierung von Skripten verhindert, dass ich Objekte überhaupt beize, auch wenn die Klassendefinitionen sich nicht wirklich geändert haben (oder sich nur gutartig geändert haben).
Ich habe nicht viel Zeit damit verbracht, aber das kann nützlich sein: http://docs.python.org/2/library/pickle.html#pickling-and-unpickling-normal-class-instances – mgilson