我从主文件夹 /project
启动 IPython。现在,如果我在文件 /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]
它似乎检测到在文件夹 /tests
中进行了更改,但它无法导入它。有人可以帮我解决这个问题吗?
编辑:
为了更好地说明:我从主文件夹中的终端启动 IPython。在这个文件夹中,我有另一个文件夹 tests
。在 tests
里面我有两个 python 文件:
some_module.py:
def hello_world():
print "Hello World!!!"
use_some_module.py:
from some_module import hello_world
hello_world()
启动 IPython 后,some_module.py 中的进一步更改将不会加载到 IPython 中。例如,如果我在 hello_world()
的定义中添加第二个 print "Hello Earth!!!"
,然后运行 run tests/use_some_module.py
,我得到上面显示的错误消息,并且只会得到 "Hello World!!!"
打印。
Edit2:我想要一个不需要更改工作目录或手动添加任何搜索路径的解决方案。我希望使用 autoreload 自动加载它。
最佳答案
如果您只需要在 Python 中重新加载更改的文件,只需执行以下操作:
from main import some_module
....
reload(some_module)
但如果您的重载目的真的很急,您可以执行以下操作(取自 this question ):
%load_ext autoreload
%autoreload 2
之前的代码会在每次执行新行之前重新加载所有更改的模块。
注意:您还可以检查 dreload它执行模块的递归重新加载,并且 %run它允许您运行任何 python 脚本并将其所有数据直接加载到交互式命名空间中。
希望对你有帮助,
关于python - IPython 自动重新加载子目录中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33106590/