python - IPython 自动重新加载子目录中的更改

标签 python ipython

我从主文件夹 /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/

相关文章:

python - 将整个函数作为字符串获取/并将字符串转换为函数?

python - statsmodels 和 pandas 中的日期问题

python - 为什么 ipython 环境变量与相关终端仿真器中的 bash 环境不匹配?

python - 在 jupyter ipython 笔记本上导入 Pandas 失败

python - Jupyter: "notebook"不是 jupyter 命令

python - 如何绘制 numpy 数组与行数的关系图

python 工作日和 strftime ("%U")

python - LeetCode 762 为什么单独的代码在 Jupyter Notebook 中有效,而在 Leetcode 中无效

python - iPython 笔记本在使用对齐时不会转换为 PDF

python - IPython 7.0.1 中的多行编辑中断