Navneet
Navneet

Reputation: 9828

Save session in IPython like in MATLAB?

It would be useful to save the session variables which could be loaded easily into memory at a later stage.

Upvotes: 24

Views: 10395

Answers (5)

unutbu
unutbu

Reputation: 879411

In [23]: %logstart /tmp/session.log
Activating auto-logging. Current session state plus future input saved.
Filename       : /tmp/session.log
Mode           : backup
Output logging : False
Raw input log  : False
Timestamping   : False
State          : active

In [24]: x = 1

In [25]: %logstop

In [26]: quit()
Do you really want to exit ([y]/n)? y

Then we can restore the session with:

% ipython -log /tmp/session.log 
Activating auto-logging. Current session state plus future input saved.
Filename       : ipython_log.py
...

In [1]: x
Out[1]: 1

For more on "Session logging and restoring" see the docs.

Note that this merely stores the commands run by IPython. It does not save the state of the IPython session. Restoring the session requires re-execution of the commands.


If you set the PYTHONSTARTUP environment variable to point at a file called, say, startup.py:

PYTHONSTARTUP=/path/to/startup.py

then put the following in /path/to/startup.py:

try:
    # https://stackoverflow.com/a/5377051/190597 (Tom Dunham)
    __IPYTHON__
except NameError:
    pass
else:
    # https://stackoverflow.com/a/15898875/190597 (user2261139)
    from IPython import get_ipython
    ipython = get_ipython()
    ipython.magic("%logstart /tmp/session.log")

then IPython will call %logstart automatically whenever you start an interactive session.

Upvotes: 13

alpha_989
alpha_989

Reputation: 5350

Not my solution, but this seems to be the closest solution, if you are using ipython: https://stackoverflow.com/a/28552465/4752883

Upvotes: 0

Harshit Garg
Harshit Garg

Reputation: 2259

There is also a magic command, history, that can be used to write all the commands/statements given by user.

Syntax : %history -f file_name. Also %save file_name start_line-end_line, where star_line is the starting line number and end_line is ending line number. Useful in case of selective save.

%run can be used to execute the commands in the saved file

Upvotes: 1

Navaneethan Santhanam
Navaneethan Santhanam

Reputation: 1837

I haven't tried this yet, but starting from AE Drew's answer, I found a possible alternative. Looks like IPython has a built in magic command that does this called %store:

%store magic for lightweight persistence. Stores variables, aliases and macros in IPython’s database. To automatically restore stored variables at startup, add this to your ipython_config.py file:

c.StoreMagic.autorestore = True

Upvotes: 1

A.E. Drew
A.E. Drew

Reputation: 2137

Looking for something similar I came across save_ipython_variables:

save-ipython-variables lets you ... save your global IPython variables to disk easily, and load them back into the global namespace when you need them again, even in a whole new IPython session.

I haven't had much chance to use it yet, but looks promising.

Upvotes: 4

Related Questions