IPython自动加载子目录中的更改

Mic*_*ael 13 python ipython

我从主文件夹启动IPython /project.现在,如果我在文件中进行更改/project/tests/some_module.py,则无法在IPython中自动重载更改.另外,在保存更改并希望在提示符中运行其他脚本后,我收到以下消息:

[autoreload of some_module failed: Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/IPython/extensions/autoreload.py", line 229, in check
    superreload(m, reload, self.old_objects)
ImportError: No module named some_module]
Run Code Online (Sandbox Code Playgroud)

它似乎检测到文件夹内的更改,/tests但无法导入它.有人可以帮我弄这个吗?

编辑: 为了更好地说明:我从主文件夹中的终端启动IPython.在这个文件夹中,我有另一个文件夹tests.里面tests我有两个python文件:

some_module.py:

def hello_world():
  print "Hello World!!!"
Run Code Online (Sandbox Code Playgroud)

use_some_module.py:

from some_module import hello_world

hello_world()
Run Code Online (Sandbox Code Playgroud)

一旦我启动IPython,some_module.py中的进一步更改将不会在IPython中加载.例如,如果我print "Hello Earth!!!"在定义hello_world()和运行中添加第二个run tests/use_some_module.py,我会收到上面显示的错误消息,并且只会获得"Hello World!!!"打印.

Edit2:我想要一个解决方案,我不需要更改工作目录,也不需要手动添加任何搜索路径.我想让它自动加载自动加载.

ave*_*net 2

如果您需要的只是在 Python 中重新加载已更改的文件,只需执行以下操作:

from main import some_module
....
reload(some_module)
Run Code Online (Sandbox Code Playgroud)

但是,如果您的重新加载目的确实很迫切,您可以执行以下操作(取自此问题):

%load_ext autoreload
%autoreload 2
Run Code Online (Sandbox Code Playgroud)

前面的代码每次在执行新行之前都会重新加载所有更改的模块。

注意:您还可以检查dreload,它会递归地重新加载模块,以及%run,它允许您运行任何 python 脚本并将其所有数据直接加载到交互式命名空间中。

希望能帮助到你,