【问题标题】:Reimport modules: Reload not working重新导入模块:重新加载不起作用
【发布时间】:2018-06-14 10:33:49
【问题描述】:

我是一名 Matlab 用户,并且是 Python 新手。我想从外部文件中调用最简单的 python 函数。我编辑了函数,但我的 Canopy 解释器 (IPython) 无法识别新版本并继续调用旧文件!

说这个函数保存为mymodule.py:

def oper(x):
  print(x)

主文件是:

del mymodule.pyc 
import mymodule
import imp
imp.reload(mymodule)

oper(5)

运行一次。将 print(x) 更改为 print(x+1)。它继续执行 print(x)。 如果我在主文件中定义函数 oper(x),或者如果我关闭 Canopy 并重新打开它,或者如果我通过 GUI Run>Reset Kernel 重置 Canopy 内核,都可以(但我无法对这些进行编程)。

我也试过 reload(mymodule) 和 %reset,都没有解决问题。理想情况下,我希望在主文件中有一个 Python 命令可以完全重置工作区(内核、namespctes 等)。我正在使用 Canopy 1.7.4.3348,其中包括 Python 2.7.11 和 IPython 4.0.0.9。

【问题讨论】:

    标签: python python-2.7 python-import reload


    【解决方案1】:

    你需要像这样导入并像这样使用

    from mymodule import oper
    oper(5)
    

    import mymodule
    mymodule.oper(5)
    

    另外,在 mymodule 的同一目录中,在那里创建一个空的 __init__.py 文件。这会让 python 知道它是一个模块。

    【讨论】:

    • 这是正确的,但没有回答 OP 的问题。他想知道如何在交互式会话中重新导入模块,以使用他模块中的更新版本的函数。
    • 我做了你提到的两个步骤。解决不了问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2019-03-14
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    相关资源
    最近更新 更多