我在django IPython-shell中工作,它可以用manage.py shell
开头。 当我在shell中加载extern函数进行测试时,一切都很好。但是,当我对该功能进行更改时,外壳仍然具有旧版本的功能。即使我做了一个新的进口。django,python:在shell中重载函数
有谁知道如何重新加载功能的实际版本?
谢谢!
编辑:我使用Windows - 如果这有所作为。
我在django IPython-shell中工作,它可以用manage.py shell
开头。 当我在shell中加载extern函数进行测试时,一切都很好。但是,当我对该功能进行更改时,外壳仍然具有旧版本的功能。即使我做了一个新的进口。django,python:在shell中重载函数
有谁知道如何重新加载功能的实际版本?
谢谢!
编辑:我使用Windows - 如果这有所作为。
尝试在所需的模块上使用内置的“重新加载”功能。
http://docs.python.org/library/functions.html?highlight=reload#reload
我重装通过它从这个sys.modules中删除,并作出新的导入模块。
import sys
sys.modules.pop('your.module')
import your.module
# or
from your.module import your_function
我写了一个script,它很适合在IPython中重新加载模块。
它基于wrongite's answer above中的技术,您可以从sys.modules中删除该模块,然后重新导入它。
我找到的最简单的解决方案是shell_plus和iPython的组合,它可以自动重新加载函数。
它不为我重新加载。 Python 2.6,2.7,3.4,3.5,Django 1.6,1.7,1.8,1.9,1.10。 Ofc与django扩展安装。 – Sassan 2016-09-27 18:15:04
导入任何代码之前启用自动重载的IPython扩展:
%load_ext autoreload
%autoreload 2
我与常规的Django shell中使用它和它的作品完美,但它确实有一些限制:
注意事项:
以可靠的方式重新加载Python模块是在一般的困难,可能会出现意想不到的事情。 %autoreload试图通过用新版本替换模块中以前的函数代码对象和类的一部分来解决常见的陷阱。这使得以下事情起作用:
一些已知的其余警告的是:
来源:https://ipython.org/ipython-doc/3/config/extensions/autoreload.html#caveats
另一个伟大的选择是编写你的代码在一个单独的脚本,并将其发送给Django的壳,就像这个:
manage.py shell < my_script.py
重载功能将不会与django一起使用。 请参阅:http://stackoverflow.com/questions/890924/how-do-you-reload-a-django-model-module-using-the-interactive-interpreter-via-ma – Hovis 2011-08-23 01:36:43