我在django IPython-shell中工作,可以使用manage.py shell
启动。
当我在shell中加载extern函数进行测试时,一切都很好。但是当我对函数进行更改时,shell仍然具有旧版本的函数。即使我进行了新的导入。
有谁知道如何重新加载函数的实际版本?
非常感谢!
编辑:我使用Windows - 如果这有所不同。
答案 0 :(得分:6)
我通过从sys.modules中删除它来重新加载模块并进行新的导入。
import sys
sys.modules.pop('your.module')
import your.module
# or
from your.module import your_function
答案 1 :(得分:2)
尝试在所需模块上使用内置的“重新加载”功能。
http://docs.python.org/library/functions.html?highlight=reload#reload
答案 2 :(得分:1)
在导入任何代码之前启用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
答案 3 :(得分:0)
我写了一个script,非常适合在IPython中重新加载模块。
它基于wrongite's answer above中的技术,您可以从sys.modules中删除该模块,然后重新导入该模块。
答案 4 :(得分:0)
我发现的最简单的解决方案是shell_plus和iPython的组合,可以自动重新加载函数。