How to save all the variables in the current python session?
If you use shelve, you do not have to remember the order in which the objects are pickled, since shelve
gives you a dictionary-like object:
To shelve your work:
import shelve
T='Hiya'
val=[1,2,3]
filename='/tmp/shelve.out'
my_shelf = shelve.open(filename,'n') # 'n' for new
for key in dir():
try:
my_shelf[key] = globals()[key]
except TypeError:
#
# __builtins__, my_shelf, and imported modules can not be shelved.
#
print('ERROR shelving: {0}'.format(key))
my_shelf.close()
To restore:
my_shelf = shelve.open(filename)
for key in my_shelf:
globals()[key]=my_shelf[key]
my_shelf.close()
print(T)
# Hiya
print(val)
# [1, 2, 3]
Save variables in Python session?
I think the closest thing you're going to find is ipython. I'm not sure if it does the variable saving thing, but I believe it does everything else you're asking for.
How to save all python objects from working directory to a file
If I understood your need, you want to backup your session.
If that is the case, here is a solution using pickle
. Kr.
First solution is:
import pickle
def is_picklable(obj):
try:
pickle.dumps(obj)
except Exception:
return False
return True
bk = {}
for k in dir():
obj = globals()[k]
if is_picklable(obj):
try:
bk.update({k: obj})
except TypeError:
pass
# to save session
with open('./your_bk.pkl', 'wb') as f:
pickle.dump(bk, f)
# to load your session
with open('./your_bk.pkl', 'rb') as f:
bk_restore = pickle.load(f)
***Second solution is with dill
. You might have error if in your workspace, there are some unpicklable objects ***:
import dill
dill.dump_session('./your_bk_dill.pkl')
#to restore session:
dill.load_session('./your_bk_dill.pkl')
Third option go with shelve
package:
import shelve
bk = shelve.open('./your_bk_shelve.pkl','n')
for k in dir():
try:
bk[k] = globals()[k]
except Exception:
pass
bk.close()
# to restore
bk_restore = shelve.open('./your_bk_shelve.pkl')
for k in bk_restore:
globals()[k]=bk_restore[k]
tmp[k] = bk_restore[k]
bk_restore.close()
Check and let's know about your trial.
Credits: The second and third solution are nearly a shameless copy/paste from those two links belows. I adapted the handling of errors as the original answer will lead to error for pickling of module.
dill solution
shelve solution
How to save a Python interactive session?
IPython is extremely useful if you like using interactive sessions. For example for your use-case there is the %save
magic command, you just input %save my_useful_session 10-20 23
to save input lines 10 to 20 and 23 to my_useful_session.py
(to help with this, every line is prefixed by its number).
Furthermore, the documentation states:
This function uses the same syntax as %history for input ranges, then saves the lines to the filename you specify.
This allows for example, to reference older sessions, such as
%save current_session ~0/
%save previous_session ~1/
Look at the videos on the presentation page to get a quick overview of the features.
Related Topics
Find and Replace Specific Values Within 2D Array
Saving the Output of a Python Program
Importing Local Module (Python Script) in Airflow Dag
How to Pass Variables from Python Script to Bash Script
How to Stop Python Script Using Command Line
How to Index a Middle Character in a List in Python
How to Make Python Get the Username in Windows and Then Implement It in a Script
How to Convert a Django Queryset into List of Dicts
Python Format Size Application (Converting B to Kb, Mb, Gb, Tb)
Python: [Errno 10054] an Existing Connection Was Forcibly Closed by the Remote Host
How to Start a Background Process in Python
Counting the No. of Black to White Pixels in the Image Using Opencv