当前位置: 首页 > 面试题库 >

如何在Python中重新加载模块的功能?

阎咏思
2023-03-14
问题内容

跟进有关重新加载模块的问题,如何从已更改的模块重新加载特定功能?

伪代码:

from foo import bar

if foo.py has changed:
    reload bar

问题答案:

您想要的是可能的,但是需要重新加载两件事……首先reload(foo),但是您还必须这样做reload(baz)(假设baz是包含该from foo import bar语句的模块的名称)。

至于为什么…foo第一次加载时,将foo创建一个bar对象,其中包含一个对象。当您导入barbaz模块,它存储到一个参考bar。当reload(foo)被调用时,foo对象被消隐,并且该模块重新执行。这意味着所有foo引用仍然有效,但是bar已经创建了一个新对象…因此,已导入到某处的所有引用仍然是对
bar对象的引用。通过重新加载baz,使它重新导入新的bar

或者,您可以只import foo在模块中执行操作,并始终调用foo.bar()。这样,无论何时reload(foo),您都将获得最新的bar参考。

注意:从Python 3开始,首先需要通过导入reload函数 from importlib import reload



 类似资料:
  • 问题内容: 我有一台运行时间较长的Python服务器,并且希望能够在不重新启动服务器的情况下升级服务。最好的方法是什么? 问题答案: 你可以使用reload内置函数重新加载已导入的模块: 在Python 3中,已移至imp模块。在3.4中,不推荐使用importlib,而在中添加了。当定位到3或更高版本时,在调用reload或导入时参考相应的模块。 我认为这就是你想要的。诸如Django开发服务器

  • 问题内容: 我有一个运行时间较长的Python服务器,并且希望能够在不重新启动服务器的情况下升级服务。最好的方法是什么? 问题答案: 您可以使用reload内置函数(仅适用于Python 3.4+)重新导入已导入的模块: 在Python 3中,已移至模块。在3.4中,imp不推荐使用,而reload在中添加了。当定位到3或更高版本时,在调用reload或导入时参考相应的模块。 我认为这就是您想要的

  • 问题内容: 扩展现有Python模块的最佳实践是什么–在这种情况下,我想通过向基础API类添加新方法来扩展该包。 我看了看,我也很喜欢。我只是发现更容易理解和扩展所需的功能。 我已经编写了方法-我试图找出在不更改此模块核心的情况下将其添加到package模块中的最Pythonic且破坏性最小的方法。 问题答案: 几种方法。 简单的方法: 不要扩展模块,扩展类。 exttwitter.py 缺点:t

  • 问题内容: 目前,我正在处理一个包含子模块并使用numpy / scipy的python项目。Ipython用作交互式控制台。不幸的是,我对现在使用的工作流程不是很满意,请多多指教。 在IPython中,该框架是通过一个简单的命令加载的。但是,通常有必要在框架的子模块之一中更改代码。至此,一个模型已经加载完毕,我使用IPython与之交互。 现在,该框架包含许多相互依赖的模块,即,在最初加载框架时

  • 问题 你想重新加载已经加载的模块,因为你对其源码进行了修改。 解决方案 使用imp.reload()来重新加载先前加载的模块。举个例子: >>> import spam >>> import imp >>> imp.reload(spam) <module 'spam' from './spam.py'> >>> 讨论 重新加载模块在开发和调试过程中常常很有用。但在生产环境中的代码使用会不安全,因

  • 本文向大家介绍Python重新加载模块的实现方法,包括了Python重新加载模块的实现方法的使用技巧和注意事项,需要的朋友参考一下 importlib 模块的作用 模块,是一个一个单独的py文件 包,里面包含多个模块(py文件) 动态导入模块,这样就不用写那么多的import代码, 典型的例子: 自动同步服务,每个网站都有一个py文件。主进程里收到同步任务,根据名称来动态导入对应的py文件,这样就