【发布时间】:2015-10-13 15:24:03
【问题描述】:
我从主文件夹 /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 自动加载。
【问题讨论】:
-
第一次如何导入你的模块?您是否在首次导入和重新加载之间更改工作目录?
-
来自Edit2的@michael,错误
ImportError: No module named some_module表示autoreload模块的superreload函数找不到some_module,因为some_module不在搜索路径中。 -
@NizamMohamed 如果我退出 ipython 并在同一个父目录中重新启动它,更改会更新。
-
@NizamMohamed 所以,我想要的是它在每次
tests/发生变化时自动执行此操作。我已经在我的 ipython 配置文件中添加了autoreload 2,它可以在我启动 ipython 的同一目录中完成更改工作,但它无法完成对子目录中的更改的工作。我想要一个可以添加到我的 ipython 配置文件中的解决方案,以便它自动执行。 -
我已经更新了我的答案。