Автоматическая загрузка модулей в IPython [дублировать]

StackOverflow https://stackoverflow.com/questions/1907993

Вопрос

На этот вопрос уже есть ответ здесь:

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

Это было полезно?

Решение

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

%load_ext autoreload
%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

ИСПРАВЛЕНО - пожалуйста, смотрите Andrew_1510's ответ ниже показано, как был обновлен IPython.

...

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

Теперь он поставляется вместе с IPython!

import ipy_autoreload
%autoreload 2
%aimport your_mod

# %autoreload? for help

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

если вы добавите 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top