Автоматическая загрузка модулей в IPython [дублировать]
-
19-09-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
- Перезагрузка подмодулей в IPython 11 ответов
Есть ли способ заставить 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