IPython notebook:如何重新加载特定Python文件中的所有模块?

use*_*123 4 python ipython ipython-notebook

我在文件中定义了许多模块,并添加from myFile import *到我的ipython笔记本的第一行,以便我可以将它用作此笔记本中其他部分的依赖项.

目前我的工作流程是:

  1. 修改 myFile
  2. 重启Ipython内核
  3. 重新运行Ipython中的所有代码.

有谁知道是否有办法重新加载所有模块myFile而无需重启Ipython内核?谢谢!

Gur*_*tap 16

使用导入库!

import importlib
importlib.reload(my_awesome_python_script)
Run Code Online (Sandbox Code Playgroud)

因此,当您my_awesome_python_script在后端进行更改时,无需重新启动内核或重新运行整个笔记本。只需重新运行该单元即可。如果您在内存密集的数据集上做了很多工作,这将非常有用

  • 如果您导入了像“from my_awesome_python_script import MyAwesomeClass”这样的对象,这将不起作用。你会得到“my_awesome_python_script is not Defined” (2认同)

met*_*rsk 12

来自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
Run Code Online (Sandbox Code Playgroud)

您还可以通过执行以下操作将自动重新加载配置为自动执行: ipython profile create

并添加以下内容 ~/.config/ipython/profile_default/ipython_config.py

c.InteractiveShellApp.extensions = ['autoreload']
c.InteractiveShellApp.exec_lines = ['%autoreload 2']
c.InteractiveShellApp.exec_lines.append('print("Warning: disable autoreload in ipython_config.py to improve performance.")')
Run Code Online (Sandbox Code Playgroud)

注意:如果重命名函数,则需要重新运行import语句

  • 神奇的数字 2——这指的是什么?%自动重载2 (2认同)