Ich möchte alle Variablen in meiner aktuellen Python-Umgebung speichern. Es scheint eine Möglichkeit zu sein, das 'Pickle'-Modul zu verwenden. Ich möchte dies jedoch aus zwei Gründen nicht tun:
1) Ich muss pickle.dump () für jede Variable aufrufen.
2) Wenn ich die Variablen abrufen möchte, muss ich mir die Reihenfolge merken, in der ich die Variablen gespeichert habe, und dann pickle.load () ausführen, um jede Variable abzurufen.
Ich suche nach einem Befehl, der die gesamte Sitzung speichert, damit beim Laden dieser gespeicherten Sitzung alle meine Variablen wiederhergestellt werden. Ist das möglich?
Vielen Dank!
Gaurav
Bearbeiten: Ich denke, es macht mir nichts aus, pickle.dump () für jede Variable aufzurufen, die ich speichern möchte, aber sich an die genaue Reihenfolge zu erinnern, in der die Variablen gespeichert wurden, scheint eine große Einschränkung zu sein. Das möchte ich vermeiden.
PicklingError: Can't pickle <built-in function raw_input>: it's not the same object as __builtin__.raw_input
Ich habe nur 2 Variablen in meinem Arbeitsbereich deklariert. Irgendwelche Ideen, wie man das löst? Hat sich nach dieser Antwort eine bessere Möglichkeit zum Speichern der aktuellen Sitzung ergeben?except:
stattdessen einfach stattexcept TypeError:
. Dies wird benutzerdefinierte Variablen und die meisten Objekte zurückstellen (Pandas Datenrahmen für mich in Ordnung)Nachdem ich hier gesessen und das
globals()
Wörterbuch nicht gespeichert hatte, stellte ich fest, dass Sie eine Sitzung mithilfe der Dill-Bibliothek auswählen können.Dies kann erreicht werden mit:
quelle
TypeError: no default __reduce__ due to non-trivial __cinit__
Ein sehr einfacher Weg, der Ihre Bedürfnisse befriedigen könnte. Für mich hat es ganz gut geklappt:
Klicken Sie einfach auf dieses Symbol im Variablen-Explorer (rechte Seite von Spider):
Speichern aller Variablen im * .spydata-Format
Laden aller Variablen oder Bilder etc.
quelle
Hier ist eine Möglichkeit, die Spyder-Arbeitsbereichsvariablen mithilfe der Spyderlib-Funktionen zu speichern
Lassen Sie mich wissen, ob es für Sie funktioniert. David BH
quelle
Sie versuchen, Ihren Prozess in den Ruhezustand zu versetzen. Dies wurde bereits diskutiert . Die Schlussfolgerung ist, dass es bei diesem Versuch mehrere schwer zu lösende Probleme gibt. Zum Beispiel beim Wiederherstellen offener Dateideskriptoren.
Es ist besser, über das Subsystem Serialisierung / Deserialisierung für Ihr Programm nachzudenken. Es ist in vielen Fällen nicht trivial, aber in einer langfristigen Perspektive eine weitaus bessere Lösung.
Obwohl, wenn ich das Problem übertrieben habe. Sie können versuchen, Ihre globalen Variablen diktieren . Verwenden Sie
globals()
diese Option, um auf das Wörterbuch zuzugreifen. Da es varname-indiziert ist, müssen Sie sich nicht um die Reihenfolge kümmern.quelle
Wenn die akzeptierte Antwort abstrahiert werden soll, können Sie Folgendes verwenden:
So rufen Sie den Arbeitsbereich ab:
es hat funktioniert, als ich es ausgeführt habe. Ich gebe zu, ich verstehe nicht
dir()
und zuglobals()
100%, daher bin ich mir nicht sicher, ob es eine seltsame Einschränkung geben könnte, aber bisher scheint es zu funktionieren. Kommentare sind willkommen :)Nach einigen weiteren Recherchen funktioniert es nicht wie erwartet, wenn Sie die Überprüfungen in einem lokalen Bereich speichern, wenn Sie
save_workspace
wie von mir vorgeschlagen mit Globals anrufen undsave_workspace
sich in einer Funktion befinden. Für diesen Gebrauchlocals()
. Dies geschieht, weil Globals die Globals aus dem Modul entnimmt, in dem die Funktion definiert ist, und nicht aus dem Ort, an dem sie aufgerufen wird.quelle
Sie können es als Textdatei oder CVS-Datei speichern. Menschen verwenden Spyder zum Beispiel zum Speichern von Variablen, aber es gibt ein bekanntes Problem: Für bestimmte Datentypen kann es später nicht importiert werden.
quelle