8

ドキュメントによると、マクロを定義して保存できるはずです。これで、次に IPython シェルを起動したときにマクロが使用可能になります。しかし、それはうまくいきません:

In [4]: print "Foobarbatbizbuzzbonk"
Foobarbatbizbuzzbonk

In [5]: %macro foo 4
Macro `foo` created. To execute, type its name (without quotes).
=== Macro contents: ===
print "Foobarbatbizbuzzbonk"

In [6]: %store foo
Stored 'foo' (Macro)

In [7]: quit()

IPython シェルを再度起動すると、マクロはありません:

In [1]: foo
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-d3b07384d113> in <module>()
----> 1 foo

NameError: name 'foo' is not defined

In [2]: %macro
Out[2]: []

これが機能しない理由を誰かが知っていますか?

4

3 に答える 3

12

これに対する答えは、いくつかのあいまいな場所で見つかりました。

まず、$HOME/.ipython にある README には、「IPython の構成の詳細については、次を実行してください。ipython config -h

これを行うと、次のアドバイスを含む多くのヘルプが生成されます。

To initialize a profile with the default configuration file, do::

  $> ipython profile create

and start editing `IPYTHONDIR/profile_default/ipython_config.py`

この構成ファイルの古いドキュメントは次のとおりです: ipython コマンド ライン アプリケーションの構成。最新 (2020 年 1 月現在) は、構成とカスタマイズに関する大幅に改善されたセクションにあります。

最後に、 storemagicのドキュメントで答えを見つけました[Link updated, Jan. 2020]:

軽量永続化のための %store マジック。変数、エイリアス、およびマクロを IPython のデータベースに格納します。起動時に保存された変数を自動的に復元するには、これを ipython_config.py ファイルに追加します。

c.StoreMagics.autorestore = True

それを追加して、IPython を再起動してください。私のマクロがあります。涼しい!

于 2013-07-17T19:44:50.400 に答える
9

シェルでマクロを定義して保存する代わりに、スタートアップ ファイルでマクロを定義することもできます。たとえば、次の行を IPYTHONDIR/profile_default/ipython_config.py に入れることができます。

get_ipython().define_macro('foo','print "Foobarbatbizbuzzbonk"')

マジック コマンドのマクロを定義する場合は、次のようなものを使用できます。

get_ipython().define_macro('clr',"""get_ipython().magic(u'%reset -sf')""");

引数を受け入れるオプションを持つマジック コマンドのマクロを定義する方法がわかりません (たとえば、「%run -i tmp」の代わりに「rn tmp」と入力して、ipython の名前空間でファイル tmp.py を実行します)。

于 2014-06-19T19:03:21.313 に答える
4

ipython の適切なドキュメントを見つけるのは悪夢である場合があることを認めなければなりません (基本については)。このインタラクティブなコンソールは、プログラミングの達人向けに作成されたようです。少なくとも、事後使用のために変数を保存するような単純な問題を解決しようとするとき、それは私が感じるものです... matlabで単純なもの以上のものです。

しかし、あなたの質問に答えるには... ipythonと入力して通常どおりipythonを開いてから %store -r と書いてみてください

元の名前でデータを復元する必要があります。変数をファイルに保存する方法や、必要な変数だけを復元する方法はまだわかりません。ところで、保存された変数の名前を知るには、%store と入力します。

それがうまくいくことを願っています。

于 2013-08-15T16:55:42.843 に答える