2013-07-17 11 views
7

Zgodnie z dokumentami, powinienem móc zdefiniować makro i zapisać je. Następnie makro będzie dostępne przy następnym uruchomieniu powłoki IPython. Ale to nie działa:Przechowywanie makr w IPythonie

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() 

Kiedy znowu zacznę ipython skorupę, nie makra:

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]: [] 

Czy ktoś wie dlaczego to nie działa?

Odpowiedz

7

Znalazłem odpowiedź na to w kilku nieokreślonych miejscach.

Po pierwsze, w README znalezionego w $ HOME/.ipython, to mówi: "Aby uzyskać więcej informacji na temat konfigurowania ipython, zrobić: ipython config -h"

Doing która produkuje kilka pomoc w tym następujących wskazówek:

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

    $> ipython profile create 

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

OK, świetnie. Zrobił to. Teraz, co umieścić w tym pliku jest zawarte w Configuring the ipython command line application. Ale ten dokument nie wspomina o% składowania.

Wreszcie znalazłem moją odpowiedź w konfiguracji i personalizacji, pod Rozszerzenia powiązane z ipython, gdzie znajdziesz wpis storemagic, który mówi:

% sklep magiczne dla lekkiej wytrwałości. Przechowuje zmienne, aliasy i makra w bazie danych IPython. Aby automatycznie przywrócić zapisane zmiennych przy starcie, dodać to do pliku ipython_config.py:

c.StoreMagic.autorestore = True 

dodać, że ponowne uruchomienie ipython i bum! są moje makra. Chłodny!

4

Muszę przyznać, że czasami znalezienie dobrej dokumentacji dla ipython jest koszmarem (dla podstaw). Wygląda na to, że ta interaktywna konsola została stworzona dla prawdziwych guru programowania. Przynajmniej tak czuję, próbując rozwiązać prosty problem, na przykład zapisując zmienną do użytku tylnego ... coś więcej niż proste w matlabie.

Ale odpowiedzi na swoje qestion ... spróbuj otworzyć ipython normalnie wpisanie ipython a następnie napisać% sklep -r

Należy odzyskać dane z oryginalnej nazwy (ów). Nadal nie wiem, w jaki sposób przechowywać zmienne w plikach lub odzyskiwać tylko pożądane zmienne. BTw, aby poznać nazwy zapisanych zmiennych, wpisz% store.

Mam nadzieję, że to działa dla Ciebie.

+1

tak samo tutaj ... dokumenty są bardzo trudne do odczytania :( – tim

7

Jako alternatywę dla definiowania makra w powłoce, a następnie przechowywania go, można po prostu zdefiniować makro w pliku startowym. Na przykład można umieścić następującą linię w pliku IPYTHONDIR/profile_default/ipython_config.py:

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

Jeśli chcesz zdefiniować makro dla magicznego polecenia, można użyć coś takiego:

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

I nie zorientowali się, jak definiować makra do magicznego polecenia z opcjami, które będą akceptować argumenty (np. wpisując "rn tmp" zamiast "% run -i tmp", aby uruchomić plik tmp.py w przestrzeni nazw ipython).

+2

To jest lepsza odpowiedź, ponieważ OP prosił tylko o utrwalenie makr. "% Store" spowoduje również, że zmienne będą trwałe, co dało mi niektóre nieprzyjemne niespodzianki ... – dirkjot

+1

Aby to zadziałało, musisz najpierw uruchomić 'ipython --init', który utworzy twoją osobistą konfigurację (domyślny profil) Znajdź twój IPYTHONDIR, wydając' ipython locate'. – dirkjot