IPythonを深く掘り下げて、あまり説明されていないドキュメントや廃止されたドキュメントを掘り下げて、私はうまくいくと思われるソリューションをまとめましたが、それはいくつかの理由で最適ではないと確信しています。すなわち: - 私はhistory
を変更しますが、無視
- はそれが私はそれがデータベーステーブルを座標クリーンアップ/ために世話をしていません
- IPythonの行を実行するたび
history
データベース上GROUP BY
クエリを実行しますoutput_history
およびsessions
テーブル
私は$HOME/.ipython/profile_default/startup
内のファイル(私はdedupe_history.py
それを名前を付けられますが、名前は無関係である)に次のように置く:
import IPython
import IPython.core.history as H
## spews a UserWarning about locate_profile() ... seems safe to ignore
HISTORY = H.HistoryAccessor()
def dedupe_history():
query = ("DELETE FROM history WHERE rowid NOT IN "
"(SELECT MAX(rowid) FROM history GROUP BY source)")
db = HISTORY.db
db.execute(query)
db.commit()
def set_pre_run_cell_event():
IPython.get_ipython().events.register("pre_run_cell", dedupe_history)
## dedupe history at start of new session - maybe that's sufficient, YMMV
dedupe_history()
## run dedupe history every time you run a command
set_pre_run_cell_event()