升级后恢复/导入丢失的IPython历史记录

时间:2013-07-15 10:19:57

标签: sqlite upgrade history pip ipython

我最近执行了pip install --upgrade ipython,因此将旧的ipython版本更新为0.13.2。从那时起,IPython开始使用sqlite文件来存储其历史记录。

显然$ HOME / .ipython / history中的旧历史文件是完整的,但未使用。而是创建了一个新文件夹profile_default,其中包含history.sqlite文件,但没有导入任何以前的ipython命令行历史记录条目。

有关如何使我的上一个历史记录重新启动并运行或如何将文本历史记录导入history.sqlite数据库的任何建议都非常有帮助。

1 个答案:

答案 0 :(得分:2)

迭代旧历史文件的行是相当直接的, 并通过HistoryManager对象将新会话写入新历史记录:

from IPython.core.interactiveshell import InteractiveShell
from IPython.core.history import HistoryManager

def migrate_history(old_histfile, new_histfile):
    """populate an IPython sqlite history from an old readline history file"""
    # shell = InteractiveShell.instance()
    history = HistoryManager(hist_file=new_histfile,
        # this line shouldn't be necessary, but it is in 0.13
        shell = InteractiveShell.instance()
    )

    with open(old_histfile) as f:
        # iterate through readline history,
        # and write to the new history database
        for linenum, line in enumerate(f):
            history.store_inputs(linenum, line)

此函数as a script,您可以运行一次以将旧的IPython历史记录转换为新的历史记录。