Je souhaite enregistrer toutes les variables de mon environnement python actuel. Il semble qu'une option consiste à utiliser le module «pickle». Cependant, je ne veux pas faire cela pour 2 raisons:
1) Je dois appeler pickle.dump () pour chaque variable
2) Lorsque je veux récupérer les variables, je dois me souvenir de l'ordre dans lequel j'ai enregistré les variables, puis faire un pickle.load () pour récupérer chaque variable.
Je recherche une commande qui sauverait la session entière, de sorte que lorsque je charge cette session enregistrée, toutes mes variables soient restaurées. Est-ce possible?
Merci beaucoup!
Gaurav
Edit: Je suppose que cela ne me dérange pas d'appeler pickle.dump () pour chaque variable que je voudrais enregistrer, mais se souvenir de l'ordre exact dans lequel les variables ont été enregistrées semble être une grande restriction. Je veux éviter ça.
PicklingError: Can't pickle <built-in function raw_input>: it's not the same object as __builtin__.raw_input
je viens de déclarer 2 variables dans mon espace de travail. Des idées pour résoudre ce problème? Une meilleure façon de sauvegarder la session en cours est-elle sortie après cette réponse?except:
place deexcept TypeError:
. Cela mettra de côté les variables définies par l'utilisateur et la plupart des objets (les trames de données pandas sont bien placées pour moi)Ayant été assis ici et n'ayant pas réussi à enregistrer le
globals()
sous forme de dictionnaire, j'ai découvert que vous pouvez décaper une session en utilisant la bibliothèque d'aneth.Cela peut être fait en utilisant:
la source
TypeError: no default __reduce__ due to non-trivial __cinit__
Un moyen très simple qui pourrait satisfaire vos besoins. Pour moi, ça s'est plutôt bien passé:
Cliquez simplement sur cette icône dans l'explorateur de variables (côté droit de Spider):
Sauvegarde de toutes les variables au format * .spydata
Chargement de toutes les variables ou photos, etc.
la source
Voici un moyen de sauvegarder les variables de l'espace de travail Spyder à l'aide des fonctions spyderlib
Dites-moi si cela marche pour vous. David BH
la source
Ce que vous essayez de faire, c'est de mettre votre processus en veille prolongée. Cela a déjà été discuté . La conclusion est qu'il existe plusieurs problèmes difficiles à résoudre en essayant de le faire. Par exemple, avec la restauration des descripteurs de fichiers ouverts.
Il est préférable de penser au sous-système de sérialisation / désérialisation de votre programme. Ce n'est pas anodin dans de nombreux cas, mais c'est une bien meilleure solution dans une perspective à long terme.
Bien que si j'ai exagéré le problème. Vous pouvez essayer de décaper vos variables globales dict . Utilisez
globals()
pour accéder au dictionnaire. Comme il est indexé varname, vous n'avez pas à vous soucier de la commande.la source
Si vous voulez que la réponse acceptée résumée fonctionne, vous pouvez utiliser:
pour obtenir / charger l'espace de travail:
cela a fonctionné quand je l'ai exécuté. J'admets que je ne comprends pas
dir()
et que je ne comprends pas àglobals()
100%, donc je ne suis pas sûr qu'il y ait une mise en garde étrange, mais jusqu'à présent, cela semble fonctionner. Les commentaires sont les bienvenus :)après quelques recherches supplémentaires, si vous appelez
save_workspace
comme je l'ai suggéré avec des globals et que vous êtessave_workspace
dans une fonction, cela ne fonctionnera pas comme prévu si vous souhaitez enregistrer les veriables dans une portée locale. Pour cette utilisationlocals()
. Cela se produit parce que globals prend les globals du module où la fonction est définie, et non de l'endroit où elle est appelée, je suppose.la source
Vous pouvez l'enregistrer sous forme de fichier texte ou de fichier CVS. Les gens utilisent Spyder par exemple pour enregistrer des variables, mais il a un problème connu: pour des types de données spécifiques, il ne parvient pas à importer en cours de route.
la source