Autoreload de módulos em IPython [duplicado]
-
19-09-2019 - |
Pergunta
Esta questão já tem uma resposta aqui:
- recarregamento submódulos em IPython 11 respostas
Existe uma maneira de ter IPython recarregar automaticamente todo o código mudou? Ou antes de cada linha é executado no shell ou na sua falta quando ele é solicitado especificamente para. Eu estou fazendo um monte de programação exploratória utilizando IPython e SciPy e é bastante uma dor de ter de recarregar manualmente cada módulo sempre que eu mudá-lo.
Solução
Para IPython versão 3.1, 4.x, 5.x
%load_ext autoreload
%autoreload 2
Em seguida, o módulo será auto-Reloaded por padrão. Este é o 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.
Existe um truque: quando você esquecer tudo do anteriormente quando utilizar ipython
, tente:
import autoreload
?autoreload
# Then you get all the above
Outras dicas
Como mencionado acima, você precisa a extensão autoreload
. Se você quer que ele inicie automaticamente toda vez que você iniciar ipython
, é preciso adicioná-lo ao arquivo de inicialização ipython_config.py
:
Pode ser necessário para gerar um primeiro:
ipython profile create
Em seguida, incluir estas linhas em ~/.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')
Assim como um aviso opcional no caso de você precisa tirar proveito de código Python compilados em arquivos .pyc
:
c.InteractiveShellApp.exec_lines.append('print "Warning: disable autoreload in ipython_config.py to improve performance." ')
edit: as obras acima com a versão 0.12.1 e 0,13
REVISADO -. Consulte Andrew_1510 do responder abaixo, como IPython foi atualizado
...
Foi uma figura pouco difícil descobrir como chegar lá a partir de um relatório de bug empoeirado, mas:
Ele vem com IPython agora!
import ipy_autoreload
%autoreload 2
%aimport your_mod
# %autoreload? for help
... então cada vez que você chamar your_mod.dwim()
, ele vai pegar a versão mais recente.
Se você adicionar ipython_config.py em ~ / .ipython / profile_default dir com linhas como a seguir, em seguida, a funcionalidade autoreload serão carregados na inicialização ipython (testado em 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')
Você pode usar:
import ipy_autoreload
%autoreload 2
%aimport your_mod
Não é uma extensão para isso, mas eu não tenho nenhuma experiência de uso ainda:
http://ipython.scipy.org/ipython /ipython/attachment/ticket/154/ipy_autoreload.py