Автозагрузка модулей в IPython

Есть ли способ, чтобы IPython автоматически перезагружал весь измененный код? Либо перед выполнением каждой строки в оболочке, либо с ошибкой, когда это специально запрашивается. Я делаю много исследовательского программирования с использованием IPython и SciPy, и мне очень больно вручную перезагружать каждый модуль всякий раз, когда я меняю его.

6 ответов

Решение

ПЕРЕСМОТРЕНЫ - пожалуйста, смотрите ответ Andrew_1510 ниже, так как IPython был обновлен.

...

Было немного сложно понять, как туда попасть из пыльного отчета об ошибках, но:

Он поставляется с IPython сейчас!

import ipy_autoreload
%autoreload 2
%aimport your_mod

# %autoreload? for help

... тогда каждый раз, когда вы звоните your_mod.dwim()Подберу последнюю версию.

Для IPython версий 3.1, 4.x и 5.x

   In [1]: %load_ext autoreload

   In [2]: %autoreload 2

Тогда ваш модуль будет автоматически перезагружен по умолчанию. Это документ:

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.

Есть хитрость: когда вы забыли все вышеперечисленное при использовании ipython, просто попробуй:

import autoreload
?autoreload
# Then you get all the above

Как уже упоминалось выше, вам нужно autoreload расширение. Если вы хотите, чтобы он запускался автоматически при каждом запуске ipythonнеобходимо добавить его в ipython_config.py файл запуска:

Может быть необходимо сначала сгенерировать один:

ipython profile create

Затем включите эти строки в ~/.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')

А также необязательное предупреждение в случае, если вам нужно воспользоваться скомпилированным кодом Python в .pyc файлы:

c.InteractiveShellApp.exec_lines.append('print "Warning: disable autoreload in ipython_config.py to improve performance." ')

редактировать: выше работает с версиями 0.12.1 и 0.13

Если вы добавите ipython_config.py в каталог ~/.ipython/profile_default со строками, как показано ниже, то функция автозагрузки будет загружена при запуске ipython (протестировано на 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')

Ты можешь использовать:

  import ipy_autoreload
  %autoreload 2 
  %aimport your_mod

Для этого есть расширение, но у меня пока нет опыта использования:

http://ipython.scipy.org/ipython/ipython/attachment/ticket/154/ipy_autoreload.py

Другие вопросы по тегам