【问题标题】:update module on import to python interpreter在导入到 python 解释器时更新模块
【发布时间】:2013-06-25 05:12:27
【问题描述】:

简而言之

每次我对模块代码进行一些更改时,如何强制 python 解释器加载我的模块的最新代码版本?

或者至少通过键入

重新加载上次修改的版本
>>> from myModule import *

进入控制台,无需重新启动整个 python 控制台并在我进行一些更改时一次又一次地设置所有内容?这对于调试来说是非常不愉快的行为。

---------更长的故事-----------

尝试删除 .pyc 文件,然后重新导入 - 但没有效果。它甚至不会再次创建 .pyc 文件 - 所以如果模块已经加载,我希望它完全忽略我的“导入”命令。

这也无济于事:

>>> mymodule.myfunc()    # the old version
>>> del myModule         # unload mymodle from python conole / interpeter
...                  # now I removed .pyc
...                  # now I make some modifications in mymodule.myfunc() code   
>>> mymodule.myfunc()    # module is unknonwn, ... OK
>>> import myModule      # try to load modified version
>>> mymodule.myfunc()    # stil the old version :(((((, How it can remember?

我也尝试过 Spyder,这个名为 “用户模块删除器 (UMD)”的功能在哪里 http://pythonhosted.org/spyder/console.html#reloading-modules-the-user-module-deleter-umd 我认为应该这样做,但似乎没有(是的,我检查它是否已打开)。

也许我遗漏了一些东西 - 有人可以解释一下它应该如何使用吗?

这是否受到导入模块不在“工作目录”但在 PYTHONPATH 中这一事实的影响?

【问题讨论】:

  • 好的,我刚刚发现 reload( mymodule ) 可以完成这项工作。但是,1)是否有可能让它以某种方式自动化? 2) 如果不是这个,UMD 有什么好处?
  • relaod 对我不起作用。我在编辑器中更改了一个文件,然后保存它。然后我在控制台中重新加载(ModuleName)并从模块运行更新的方法,我得到了旧方法。仅从编辑器 (F5) 运行模块实际上会更新模块。有什么建议吗?
  • @idoda 我也一样。你找到解决办法了吗?

标签: python-import rebuild spyder


【解决方案1】:

(此处为 Spyder 开发人员)我认为目前您无法直接在控制台中重新加载模块(但我们正在考虑在未来进行更改)。

UMD 的想法是它会重新加载您的模块,但只有如果您从 编辑器 运行导入它们的文件。如果你想直接在控制台中重新加载它们是行不通的。

假设您开发了一个模块,那么您可能在不同的脚本中使用它(很可能)您将在我们的编辑器中编写并将其发送到我们的控制台运行。 UMD 是一个小魔法,它会在发生这种情况时为您重新加载。

【讨论】:

  • 嗨,我对这个问题进行了一些研究,似乎没有可靠的方法从 Python 解释器更新模块。这就是我们提供 UMD 并使用它的原因,您只需从脚本中调用您的模块
  • 如何启用 UMD?是否默认启用?
  • 是的,默认是开启的,但是你可以在Tools > Preferences > Console > Advanced settings > User Module Reloader禁用它
  • 在 Spyder3 上:首选项 => Python 解释器 => 启用 UMR
  • Spyder3 不适合我。我在functions.py 中更改了一件事并尝试再次导入它们,但旧代码仍在运行。很烦人
【解决方案2】:

也许对其他人有用。在 Spyder 3.0.0 中,可以通过以下方式重新加载模块,

工具 -> 更新模块名称列表。

它对我有用。

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    相关资源
    最近更新 更多