我在 django IPython-shell 中工作,它可以从manage.py shell
. 当我在 shell 中加载一个外部函数进行测试时,一切都很好。但是当我对函数进行更改时,shell 仍然具有旧版本的函数。即使我进行新的导入。
有谁知道如何重新加载函数的实际版本?
感谢问候!
编辑:我使用 Windows - 如果这有所作为。
我通过从 sys.modules 中删除它重新加载模块并进行新的导入。
import sys
sys.modules.pop('your.module')
import your.module
# or
from your.module import your_function
尝试在所需模块上使用内置的“重新加载”功能。
http://docs.python.org/library/functions.html?highlight=reload#reload
在导入任何代码之前启用 IPython 自动重载扩展:
%load_ext autoreload
%autoreload 2
我将它与常规 django shell 一起使用,它运行良好,尽管它确实有一些限制:
注意事项:
以可靠的方式重新加载 Python 模块通常很困难,并且可能会发生意想不到的事情。%autoreload 尝试通过用新版本替换模块中以前的功能代码对象和类的部分来解决常见的缺陷。这使得以下事情起作用:
一些已知的剩余警告是:
来源:https ://ipython.org/ipython-doc/3/config/extensions/autoreload.html#caveats
另一个不错的选择是在单独的脚本中编写代码并将其发送到 django shell,如下所示:
manage.py shell < my_script.py
我发现的最简单的解决方案是 shell_plus 和 iPython 的组合,它会自动重新加载函数。