重新加载使用“from X import Y”导入的组件 Y

2024-01-11

在Python中,一旦我在解释器会话中导入了模块X,使用import X,并且模块在外部发生变化,我可以使用以下命令重新加载模块reload(X)。然后,这些更改将在我的口译会话中可用。

我想知道当我使用从模块 X 导入组件 Y 时这是否也可能from X import Y.

该声明reload Y不起作用,因为Y本身不是一个模块,而只是模块内部的一个组件(在本例中是一个类)。

是否可以在不离开解释器会话(或导入整个模块)的情况下重新加载模块的各个组件?

为了澄清起见,问题是关于导入类或函数 Y from a module X并在更改时重新加载,而不是包 X 中的模块 Y。


Answer

根据我的测试,标记的答案表明一个简单的reload(X),不起作用。

据我所知,正确答案是:

from importlib import reload # python 2.7 does not require this
import X
reload( X )
from X import Y

Test

我的测试如下(Python 2.6.5 + bpython 0.9.5.2)

X.py:

def Y():
    print "Test 1"

bpython:

>>> from X import Y
>>> print Y()
Test 1
>>> # Edit X.py to say "Test 2"
>>> print Y()
Test 1
>>> reload( X )  # doesn't work because X not imported yet
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'X' is not defined
>>> import X
>>> print Y()
Test 1
>>> print X.Y()
Test 1
>>> reload( X ) # No effect on previous "from" statements
>>> print Y()
Test 1
>>> print X.Y() # first one that indicates refresh
Test 2
>>> from X import Y
>>> print Y()
Test 2 
>>> # Finally get what we were after
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重新加载使用“from X import Y”导入的组件 Y 的相关文章

随机推荐

  • 以编程方式从“p”和“q”生成“d”(RSA)

    我有两个号码 p and q 我知道我能得到phi p 1 q 1 然后ed 1 mod phi 但我不确定我明白这意味着什么 我写了一些Python p NUM q NUM e NUM phi p 1 q 1 d 1 phi float
  • 回显所有 json_encoded 行

    我正在尝试循环访问数据库并输出与连接表匹配的所有行 我有以下两个表 任务项目存储与项目相关的所有数据 加入任务项存储玩家 ID 和玩家拥有的物品之间的关联 JS 传入查询表所需的所有信息 getJSON phpscripts php pla
  • 尝试使用 Protocol Buffers - Google 的数据交换格式时,goog 未定义错误

    我正在尝试使用 Protocol Buffers Google 的数据交换格式https github com google protobuf tree master js https github com google protobuf
  • plpgsql For循环中的Select语句创建多个CSV文件

    我想重复以下查询 8760 次 将一年中每个小时的 2 替换为 1 到 8760 我们的想法是每小时创建一个单独的 CSV 文件以进行进一步处理 COPY SELECT FROM public completedsolarirad2012
  • ZF2 toRoute 与 https

    我们正在使用 Zend Framework 2 并使用toRoute在我们的控制器中重定向到不同的位置 例如 this gt redirect gt toRoute home 无论如何 是否可以使用此方法或替代方法将其重定向到 https
  • 如何嵌入文件以供以后解析执行使用

    我本质上是想浏览一个 html 文件的文件夹 我想将它们嵌入到二进制文件中 并能够根据请求解析它们以用于模板执行目的 如果我措辞不当 请原谅 任何想法 提示 技巧或更好的方法来实现这一点都非常感谢 Template Files type T
  • Base64 java 中的文件编码失败

    我有这个类来编码和解码文件 当我使用 txt 文件运行该类时 结果成功 但是 当我使用 jpg 或 doc 运行代码时 我无法打开该文件 或者它不等于原始文件 我不知道为什么会发生这种情况 我修改了这个类http myjeeva com c
  • 在 Node 中通过“_id”搜索 MongoDB 条目的正确方法

    我在用着MongoDb 作为 的一部分MongoJS in Node 这是 MongoJS 的文档 https github com gett mongojs 我正在尝试根据条目在 Node 内进行调用 id场地 使用香草时MongoDB从
  • 如何改变gvim中的左边距

    我在 XP 上有 gvim 7 3 我的问题是 当我编辑文件并关闭行号时 文本距离左窗口边距太近 我不想添加前导空白 我想增加边距 当我有行号时 我不喜欢 左窗口边框和行号之间有足够的空间 行号和文本之间有足够的空间 但是当行号关闭时就没有
  • 如何获取隐藏数据库的数据库模式?

    我的客户是一家牙科诊所 购买了一款诊所管理软件 该软件安装在他们的本地服务器上 包括患者数据库 时间表和各种医疗记录 现在他们希望我为他们编写一些他们的软件包中未提供的实用程序 为此我需要能够查询该数据库 我尝试致电软件制造商的技术支持 帕
  • Azure AD - 仅应用程序令牌中缺少角色声明

    当我尝试从 Nodejs 后端服务器获取仅应用程序令牌时 如下所述here https learn microsoft com en us graph auth v2 service 4 get an access token 有时role
  • 如何在 Vim 中创建文件夹(优先使用 NERDTree)?

    我知道如何创建重命名 删除和移动文件NERDTree 只需按m then either a d or m 但我不知道如何创建文件夹 有谁知道如何做到这一点NERDTree 或者只是以 vim 的原生 方式 You use m a并放置一个尾
  • ##+#. 是什么意思?是什么意思?

    谷歌几乎是不可能的 因此我的理解仅限于阅读 slime 源代码的上下文线索 也许它是 common lisp 中对象系统的一部分 类似 自己 的东西 片段 cond swank backend sbcl with new stepper p
  • 基于列子集修剪 NA - 更优雅的解决方案?

    stackoverflow 社区的新年难题 通过阅读过去的帖子和答案很有帮助 这是我的第一个问题 我找到了解决方法 但我想知道是否可以建议其他方法 解决方案 我正在尝试从大型文件中删除尾随的 NAdata frame 但这些 NA 只出现在
  • jQuery UI DatePicker - 禁用除每月最后一天之外的所有日期

    我正在尝试使用 jquery UI 日期选择器来显示仅可选择该月最后一天的日历 我已成功使用 beforeShowDay 事件禁用一周中的几天 但不确定如何使用它来禁用除该月最后一天之外的所有内容 beforeShowDay 会为日历上显示
  • Android - 仅垂直布局

    如何确保我的应用程序仅适用于垂直布局 我努力了android screenOrientation portrait 但这似乎并不能解决问题 您需要添加到所有活动中 而不仅仅是一项活动 我认为您了解设置是每个应用程序范围内的 但事实并非如此
  • 计算测试集每个类别的熵以测量 pytorch 上的不确定性

    我正在尝试使用 MC Dropout 方法和此链接中提出的解决方案来计算图像分类任务的数据集的每一类的熵 以测量 pytorch 上的不确定性 在 pytorch 上使用 MC Dropout 测量不确定性 https stackoverf
  • Firebase 在 React-native-android 上的 Facebook 登录

    我一直在尝试从 Firebase 文档中获取 Facebook 登录代码片段 但出现以下控制台错误 window open 不是一个函数 在 React Native 应用程序上实现 Firebase 的 Facebook 登录的正确方法是
  • 对拉取请求批准和路径触发 GitHub 操作

    我想构建一个在拉取请求 PR 批准时触发的 GitHub 操作 但仅当 PR 包含对特定路径的修改时才触发 目前 我有以下实现 on pull request review types submitted paths mypath jobs
  • 重新加载使用“from X import Y”导入的组件 Y

    在Python中 一旦我在解释器会话中导入了模块X 使用import X 并且模块在外部发生变化 我可以使用以下命令重新加载模块reload X 然后 这些更改将在我的口译会话中可用 我想知道当我使用从模块 X 导入组件 Y 时这是否也可能