我有一个长期运行的Python服务器,并希望能够在不重新启动服务器的情况下升级服务.这样做的最佳方法是什么?
if foo.py has changed:
unimport foo <-- How do I do this?
import foo
myfoo = foo.Foo()
Run Code Online (Sandbox Code Playgroud) 目前我正在开发一个包含子模块并使用numpy/scipy的python项目.Ipython用作交互式控制台.不幸的是,我对我现在使用的工作流程不是很满意,我将不胜感激.
在IPython中,框架由一个简单的import命令加载.但是,通常需要更改框架的一个子模块中的代码.此时已经加载了一个模型,我使用IPython与它进行交互.
现在,框架包含许多相互依赖的模块,即在最初加载框架时,主模块正在导入和配置子模块.只有在使用重新加载模块时才会执行对代码的更改reload(main_mod.sub_mod).这很麻烦,因为我需要使用完整路径单独重新加载所有已更改的模块.如果reload(main_module)还要重新加载所有子模块,但没有重新加载numpy/scipy 将是非常方便的..
我正在使用Django并一直使用Django shell.令人讨厌的部分是当Django服务器重新加载代码更改时,shell不会,因此每次我对我正在测试的方法进行更改时,我需要退出shell并重新启动它,重新导入所有模块我需要,重新初始化我需要的所有变量等.虽然iPython历史记录在此节省了大量的输入,但这仍然很痛苦.有没有办法让django shell自动重载,就像django开发服务器一样?
我知道reload(),但我导入了很多模型并且通常使用from app.models import *语法,所以reload()没有多大帮助.
Ipython有一个名为autoreload的插件,可能会在每个命令后重新加载所有模块,因此您可以更改源代码而不必退出shell并重新输入所有命令.例如,请参阅http://dsnra.jpl.nasa.gov/software/Python/tips-ipython.html.
然而,当它与Django一起使用时,这看起来最好是片状的,例如python manage.py shell给我一个带有Django上下文的IPython shell,但是自动重载似乎根本不可靠.
这是我添加到ipy_user_conf.py文件中的内容:
def main():
... # rest of the fn here
import ipy_autoreload
ip.magic('%autoreload 2')
自动上载在有限的情况下工作,可能有10-20%的时间.有没有人成功配置这个与Django一起工作?
我在django IPython-shell中工作,可以用它开始manage.py shell.当我在shell中加载extern函数进行测试时,一切都很好.但是当我对函数进行更改时,shell仍然具有旧版本的函数.即使我做了一个新的导入.
有谁知道如何重新加载函数的实际版本?
谢谢你!
编辑:我使用Windows - 如果这有所作为.
我使用 Djangoshell_plus来测试我的模型和视图
但是当我收到错误时,我更改了代码,然后我必须重新启动我的 shell_plus
然后输入我输入的所有命令
有什么方法不需要重新启动shell,我可以更改代码,然后再次测试命令
我仍处于Django应用程序的开发阶段.在编写我的views.py之前,我测试它们以查看我的模型是否正确定义.这是我通过调用在终端中完成的
python manage.py shell
但是哦,我经常做一些语法错误,提示我中止shell ctrl-D并重新输入所有内容.这个过程将永远持续下去.如果我能在一些文件中将所有这些写入我的试验并且如果所有的都很好地复制它会更好views.py.
这个过程是什么?它就像trial.py在我的app目录中创建一样简单.我不能导入Django环境吗?最好的方法是什么?