2013-07-17 39 views
7

Theo tài liệu, tôi sẽ có thể xác định macro và lưu trữ macro. Sau đó, macro sẽ có sẵn vào lần sau khi tôi khởi động shell IPython. Tuy nhiên, nó không hoạt động:Lưu trữ macro trong 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() 

Khi tôi bắt đầu vỏ IPython một lần nữa, không có macro:

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

Có ai biết tại sao điều này không hoạt động?

Trả lời

7

Tôi đã tìm thấy câu trả lời cho điều này ở một số địa điểm ít người biết đến.

Đầu tiên, trong README tìm thấy trong $ HOME/.ipython, nó nói, "Để biết thêm thông tin về cấu hình IPython, làm: ipython config -h"

Làm điều đó tạo ra một loạt các sự giúp đỡ trong đó có những lời khuyên sau đây:

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

    $> ipython profile create 

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

OK, tuyệt. Đã làm điều đó. Bây giờ, những gì để đưa vào tập tin này được bao gồm trong Configuring the ipython command line application. Tuy nhiên, tài liệu này không đề cập đến% store.

Cuối cùng, tôi tìm thấy câu trả lời của tôi trong cấu hình và tuỳ biến, bên dưới Extensions kèm với IPython, nơi bạn sẽ tìm thấy những entry storemagic, mà nói:

% cửa hàng ma thuật cho persistence nhẹ. Lưu các biến, bí danh và các macro trong cơ sở dữ liệu của IPython. Để tự động khôi phục được lưu trữ biến lúc khởi động, thêm video này vào tập tin ipython_config.py của bạn:

c.StoreMagic.autorestore = True 

Thêm vào đó, khởi động lại IPython và đập! có các macro của tôi. Mát mẻ!

4

Tôi phải thừa nhận rằng đôi khi việc tìm kiếm tài liệu tốt cho ipython là một cơn ác mộng (đối với những điều cơ bản). Có vẻ như giao diện điều khiển tương tác này đã được tạo ra cho rất nhiều lập trình viên. Ít nhất, đó là những gì tôi cảm thấy khi cố gắng giải quyết một vấn đề đơn giản như tiết kiệm một biến cho việc sử dụng sau ... cái gì đó đơn giản hơn trong MATLAB.

Nhưng để trả lời qestion của bạn ... cố gắng mở ipython thường chỉ cần gõ ipython và sau đó viết% cửa hàng -r

Cần khôi phục dữ liệu của bạn với tên ban đầu (s). Tôi vẫn không biết việc sử dụng các biến lưu trữ vào các tệp hoặc chỉ khôi phục các biến thể mà tôi muốn. BTw, để biết tên của các biến được lưu trữ của bạn, hãy nhập% store.

Hy vọng nó phù hợp với bạn.

+1

có cùng ở đây ... docus rất khó đọc: ( – tim

7

Là một giải pháp thay thế để xác định macro trong trình bao rồi lưu trữ, bạn chỉ có thể xác định macro trong tệp khởi động. Ví dụ, bạn có thể đặt dòng sau vào IPYTHONDIR/profile_default/ipython_config.py:

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

Nếu bạn muốn xác định một macro cho một lệnh ma thuật, bạn có thể sử dụng một cái gì đó như thế này:

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

tôi đã không tìm ra cách để xác định một macro cho một lệnh kỳ diệu với các tùy chọn sẽ chấp nhận các đối số (ví dụ, gõ 'rn tmp' thay vì '% run -i tmp' để chạy tập tin tmp.py trong không gian tên của ipython).

+2

Đây là câu trả lời hay hơn, vì OP chỉ yêu cầu macro liên tục tồn tại. '% Store' cũng sẽ làm cho biến liên tục, đã cho tôi – dirkjot

+1

Để thực hiện công việc này, trước hết bạn phải chạy 'ipython --init', sẽ tạo cấu hình cá nhân của bạn (cấu hình mặc định). Tìm IPYTHONDIR của bạn bằng cách phát hành' ipython locate'. – dirkjot