我有一个长期运行的Python服务器,并希望能够在不重新启动服务器的情况下升级服务.这样做的最佳方法是什么?
if foo.py has changed:
unimport foo <-- How do I do this?
import foo
myfoo = foo.Foo()
Run Code Online (Sandbox Code Playgroud) 在Python中,一旦我在解释器会话中导入模块X import X,并且模块在外部更改,我可以重新加载模块reload(X).然后,在我的翻译会话中可以使用这些更改.
我想知道当我从模块X导入组件Y时是否也可以这样做from X import Y.
该语句reload Y不起作用,因为Y本身不是模块,而只是模块内部的一个组件(在本例中是一个类).
是否可以在不离开解释器会话(或导入整个模块)的情况下重新加载模块的各个组件?
编辑:
为了澄清,问题是从模块X导入类或函数Y并重新加载更改,而不是从包X中重新模块Y.
好吧,出于多种原因,我s = __import__('parse')在Python2中使用的时间最长,现在我需要为某些项目转换到Python3(主要是由于SSL).
但就reload()我发现而言,Python3中并没有相应的内容.只有一个选择:
import parse
parse.reload() #works
Run Code Online (Sandbox Code Playgroud)
但我真的,真的需要这个工作:
parse = __import__('parse')
parse.reload()
Run Code Online (Sandbox Code Playgroud)
要么
reload(parse)
Run Code Online (Sandbox Code Playgroud)
关于如何让它在Python3中运行的任何想法?
我正在从python控制台调试,并希望每次进行更改时重新加载模块,所以我不必退出控制台并重新输入它.我正在做:
>>> from project.model.user import *
>>> reload(user)
Run Code Online (Sandbox Code Playgroud)
但我收到:
>>>NameError: name 'user' is not defined
Run Code Online (Sandbox Code Playgroud)
重新加载整个用户类的正确方法是什么?有没有更好的方法来做到这一点,也许在调试时自动更新?
谢谢.
使用Cython,我正在开发一个扩展模块,它将构建为.so文件.然后我使用IPython测试它.在开发过程中,我经常需要进行更改和重建.我还需要退出IPython shell并重新输入所有命令.重新导入模块
import imp
imp.reload(Extension)
Run Code Online (Sandbox Code Playgroud)
不起作用,代码不更新.有没有办法让我在重建模块后避免重启IPython shell?
我知道这可能听起来像一个非常愚蠢的问题,但无论如何.我在Python中创建了一个小脚本,我在shell中做了一些更改.通常,在OS X计算机上(它正在运行Python 2.7),我只需输入reload(the_module)并重新加载包含我所做更改的模块.但是,当我在这里重新加载模块时(在windows python v.3.4上),它只是给了我这个:
>>> reload(instfile)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
reload(instfile)
NameError: name 'reload' is not defined
Run Code Online (Sandbox Code Playgroud)
然后当我输入时imp.reload(my_module),它只是说该函数已被弃用.我似乎无法找到新功能(或它的等效物)将在任何地方,所以如果有人可以帮助我,这将是伟大的!:)
我有一个名为 的文件test_file,它旨在测试另一个名为file. 'test_file' 还包含.txt同一目录中的一个文件。当我更新时file,保存,选择“更改为编辑器目录...”,然后运行test_file,Enthought 似乎无法识别file已更新。起初我原本以为我每次更新时,选择“更改为编辑目录”选项file,我也这样做,但test_file仍然打印“成功”,即使我刻意修改file,使test_file应打印假的。(是的,我确定它应该打印 false,因为我在 中添加了一堆乱码file,甚至不应该运行的代码,例如抛出return带有明显不正确缩进的语句)。所以,本质上,Enthought Canopy 没有意识到我已经更新了file.
但是,如果我保存并退出所有内容,重新打开Enthought,选择“更改为编辑器目录”,然后运行test_file,它会打印正确的结果。
这非常令人沮丧,因为在我意识到这一点之前,我花了几天时间调试正确的代码。这让我非常担心,因为我不知道我过去测试的内容是否真的正确,而且我不希望将来发生这种情况。
造成这种情况的可能原因是什么?(注:不知道这是Enthought问题还是Python问题)
我最近从python 2切换到python 3. Python 3文档读取:" Removed reload().使用imp.reload() "它并没有真正说明为什么.
这个问题描述了它现在如何在python 3中完成.有没有人知道为什么它已从内置函数中删除,现在需要imp或importlib重新加载?在使用交互式提示构建程序时测试程序时,默认情况下重新加载程序非常方便.显然,我可以通过做类似的事情来解决这个问题
from imp import reload
Run Code Online (Sandbox Code Playgroud)
每次打开交互式提示测试代码时,它只是另一行代码.这种变化背后的原因是什么?
我希望代码更改在开发过程中立即生效.如何在运行的Python(2.7)应用程序中检测更改的文件并重新加载它们?
编辑:
阅读'Ivo van der Wijk'链接的页面后,我认为最好在代码更改时重新启动Web应用程序 - 就像Django那样.所以实际的问题是:如何监控文件修改?
我有几个模块,在开发Sublime Text软件包时,我想重新加载而不必重新启动Sublime Text。
我正在运行Sublime Text内部版本3142,该版本python3.3连续运行其软件包/插件。但是,在开发插件时,我将添加到path的第三方模块导入为:
import os
import sys
def assert_path(module):
"""
Import a module from a relative path
/sf/ask/19546621/
"""
if module not in sys.path:
sys.path.insert( 0, module )
current_directory = os.path.dirname( os.path.realpath( __file__ ) )
assert_path( os.path.join( current_directory, 'six' ) ) # https://github.com/benjaminp/six
import six
Run Code Online (Sandbox Code Playgroud)
但是,当我编辑模块的源代码时,six我需要再次关闭并打开Sublime Text,否则Sublime Text无法获取对sixpython模块的更改。
到目前为止我尝试过的一些代码:
print( sys.modules )
import git_wrapper
imp.reload( find_forks )
imp.reload( git_wrapper )
imp.reload( sys )
Run Code Online (Sandbox Code Playgroud)
python ×10
python-3.x ×5
reload ×4
module ×3
python-2.7 ×2
backend ×1
built-in ×1
cython ×1
debugging ×1
enthought ×1
hotdeploy ×1
hotswap ×1
ipython ×1
keras ×1
python-3.3 ×1
python-3.4 ×1
theano ×1