Có cách nào để IPython tự động tải lại tất cả mã đã thay đổi không? Hoặc trước khi mỗi dòng được thực hiện trong trình bao hoặc thất bại khi nó được yêu cầu cụ thể. Tôi đang làm rất nhiều lập trình thám hiểm bằng cách sử dụng IPython và SciPy và nó là một nỗi đau phải tự nạp lại mỗi mô-đun bất cứ khi nào tôi thay đổi nó.Tự động tải các mô-đun trong IPython
Trả lời
SỬA ĐỔI - xin vui lòng xem Andrew_1510 của answer dưới đây, như IPython đã được cập nhật.
...
Đó là một con số khó chút hiểu làm thế nào để đạt được điều đó từ một báo cáo lỗi bụi bặm, nhưng:
Nó tàu với IPython bây giờ!
import ipy_autoreload
%autoreload 2
%aimport your_mod
# %autoreload? for help
... sau đó mỗi khi bạn gọi your_mod.dwim()
, nó sẽ nhận phiên bản mới nhất.
Điều gì sẽ xảy ra nếu nó ít trực tiếp hơn? '% run sometest.py' chứa' import themod'. Sau khi chỉnh sửa 'themod.py', tôi muốn chỉ'% chạy sometest.py', nhưng nó không nhận các thay đổi. – Jed
Tôi nghĩ rằng ipython 0,11 đã không sử dụng tính năng này. Hoặc là nó chỉ đổi tên/ẩn một nơi nào đó? – SirVer
SirVer, bạn nói đúng. Thở dài. Rõ ràng, nó nằm trong gói 'cách ly': http://www.archlinux.org/packages/community/any/ipython/files/ –
Có một phần mở rộng cho đó, nhưng tôi không có kinh nghiệm sử dụng nào:
http://ipython.scipy.org/ipython/ipython/attachment/ticket/154/ipy_autoreload.py
Đối IPython phiên bản 3.1, 4.x, 5.x và
In [1]: %load_ext autoreload
In [2]: %autoreload 2
Sau đó, mô-đun của bạn sẽ được tự động nạp lại theo mặc định. Đây là doc:
File: ...my/python/path/lib/python2.7/site-packages/IPython/extensions/autoreload.py
Docstring:
``autoreload`` is an IPython extension that reloads modules
automatically before executing the line of code typed.
This makes for example the following workflow possible:
.. sourcecode:: ipython
In [1]: %load_ext autoreload
In [2]: %autoreload 2
In [3]: from foo import some_function
In [4]: some_function()
Out[4]: 42
In [5]: # open foo.py in an editor and change some_function to return 43
In [6]: some_function()
Out[6]: 43
The module was reloaded without reloading it explicitly, and the
object imported with ``from foo import ...`` was also updated.
Có một trick: khi bạn quên tất cả những điều trên khi sử dụng ipython
, chỉ cần thử:
import autoreload
?autoreload
# Then you get all the above
Như đã đề cập ở trên, bạn cần mở rộng autoreload
. Nếu bạn muốn nó tự động khởi động mỗi khi bạn khởi động ipython
, bạn cần phải thêm nó vào tập tin ipython_config.py
khởi động:
Nó có thể là cần thiết để tạo ra một đầu tiên:
ipython profile create
Sau đó bao gồm những dòng này trong ~/.ipython/profile_default/ipython_config.py
:
c.InteractiveShellApp.exec_lines = []
c.InteractiveShellApp.exec_lines.append('%load_ext autoreload')
c.InteractiveShellApp.exec_lines.append('%autoreload 2')
cũng như một cảnh báo bắt buộc trong trường hợp bạn cần phải tận dụng lợi thế của mã Python biên soạn trong .pyc
file:
c.InteractiveShellApp.exec_lines.append('print "Warning: disable autoreload in ipython_config.py to improve performance." ')
chỉnh sửa: các công trình trên với phiên bản 0.12.1 và 0,13
Điều này thực sự tuyệt vời. Tôi đã tự hỏi tại sao không ai khác đã đăng các giải pháp để bảo tồn nó. Điều này có làm việc với các phiên bản cũ của IPython không? Tôi đã sử dụng 0,12+. Tôi nhớ rằng cách ipython lưu trữ các tùy chỉnh thay đổi đáng kể. –
Tôi đang sử dụng 0.12.1 và chưa thử 0.13, vì vậy tôi không biết liệu nó có hoạt động với 0.13+ –
Đây là một cách tiếp cận tốt hay không, nhưng tôi nghĩ tất cả những gì bạn cần làm là điền vào các mở rộng nên ở quanh dòng 27: 'c.InteractiveShellApp.extensions = ['autoreload']' – dvreed77
Bạn có thể sử dụng:
import ipy_autoreload
%autoreload 2
%aimport your_mod
nếu bạn thêm ipython_config.py vào ~/.ipython/profile_default dir với dòng như bên dưới chức năng tự động tải sẽ được tải lên khi khởi động ipython (thử nghiệm trên 2.0.0):
print "--------->>>>>>>> ENABLE AUTORELOAD <<<<<<<<<------------"
c = get_config()
c.InteractiveShellApp.exec_lines = []
c.InteractiveShellApp.exec_lines.append('%load_ext autoreload')
c.InteractiveShellApp.exec_lines.append('%autoreload 2')
- 1. Tải iPython với các gói tùy chỉnh được nhập
- 2. Tự động tải trong Python
- 3. C++ Tự động tải các lớp học
- 4. Java - Tự động tải các lớp học
- 5. Tự động tải các đặc điểm trong PHP
- 6. Dừng tải các kịch bản tự động trong Joomla 2.5
- 7. IPython không hoạt động trong vỏ Django
- 8. IPython với các tính năng bpython
- 9. ipdb, nhiều chủ đề và các chương trình tự động tải lại gây ra Lập trìnhError
- 10. Tự động tải hằng số trong PHP?
- 11. Tải mẫu AngularJS trong trang, tự động
- 12. Tự động tải soạn không tải lớp trong Silex
- 13. Jekyll tự động tải lại
- 14. Trình tải tự động JavaScript?
- 15. Tự động tải một DLL
- 16. Lớp tự động tải PHP so với chức năng tự động tải thủ tục?
- 17. Chạy các tệp khởi động hồ sơ trong một IPython được nhúng vào \t dụ
- 18. Tải lại mô-đun mở rộng Python từ IPython
- 19. JSF và tải lại tự động các tệp xhtml
- 20. Tự động tải jQuery và các tiện ích mở rộng
- 21. Linux - Linebreak trong IPython
- 22. Tự động tải các thư viện được chia sẻ Linux?
- 23. Tự động tải các tệp javascript trong UIWebView với bộ đệm cục bộ không hoạt động
- 24. matplotlib.widget không hoạt động trong máy tính xách tay ipython
- 25. Đồ thị động trong máy tính xách tay ipython
- 26. Hoàn thành tab IPython không hoạt động
- 27. Tự động tải bằng PHP với SplClassLoader?
- 28. C# Lazy tải tự động thuộc tính
- 29. JBoss AS7 Tự động tải JPA
- 30. Có thể tải JavaScript tự động không?
Ở đây, nó được triển khai dưới dạng phần mở rộng http: //projects.scipy.org/ipython/ipython/ticket/154 –
Bạn có thể xem xét thay đổi câu trả lời được chấp nhận. – Peque
Tôi nghĩ rằng nó thường công bằng để chấp nhận câu trả lời đầu tiên trả lời câu hỏi, có vẻ như một chút có nghĩa là để thay đổi nó năm sau đó! –