重新加载模块中的函数

时间:2017-12-30 21:50:31

标签: python python-2.7 python-import python-module

目标

我想从解释器导入自定义模块,运行它,修改它,重新加载它,然后再次运行它以查看更改。

背景

我正在使用python 2.7。在我开始编写自己的模块之前,我充分利用了python 2.7中的reload()函数。

我在一个简单的例子中重现了我的问题

  • 我创建了一个名为demo
  • 的文件夹
  • demo内,我放置了两个文件:__init__.pyplotme.py

我的__init__.py文件包含:

from .plotme import plot

我的plotme.py文件包含:

import matplotlib.pyplot as plt
import numpy as np

def plot():
    x=np.linspace(0,np.pi*4,1000)
    y=np.cos(x)
    plt.plot(x,y,'b')

我用命令运行它:

>>> import demo
>>> demo.plot()

它工作得很好。

接下来,我决定我希望情节是红色而不是蓝色。我在plotme.py中将'b'修改为'r'并保存。然后我输入:

>>> import(demo)
>>> demo.plot()

并且情节仍然是蓝色,而不是红色。不是我想要的。相反,我尝试:

>>> reload(demo)
>>> demo.plot()

再次,颜色没有更新。

我认为\__init__.py内需要重新加载命令。我尝试将其更新为:

from .plotme import plot
reload(plot)

当我输入时:

>>> reload(demo)

我收到错误:

TypeError: reload() argument must be module

我尝试使用reload(.plotme)重新加载。同样的错误。当我尝试reload(plotme)时,它不会抛出错误,但是绘图的颜色不会更新为红色。

我该如何解决这个问题?

每次修改几行代码时,我宁愿不必关闭并重新启动解释器。

3 个答案:

答案 0 :(得分:1)

在@MoinuddinQuadri的建议中,我更新了我的__init__.py文件以包含:

from .plotme import plot
reload(plot)
from .plotme import plot

它有效。这有点麻烦,因为我的最终应用程序将有很多独立的功能来加载,但它的工作原理。谢谢,MoinuddinQuadri。

有没有人有其他建议?如果我有20个函数,那么将它写出20次就有点乏味了。有没有办法快速重新加载所有功能?

答案 1 :(得分:1)

您必须重新加载demo模块(即文件demo/__init__.py) **and** the file demo / plotme.py which is demo.plotme . More precisely, as you import plot function from the plotme {{1 }} {plotme {1}} demo`:

sub module, you must import first

在这两个命令之后,将考虑plotme中的任何更改。

答案 2 :(得分:-1)

相关:

  

How do I unload (reload) a Python module?
   Why are there dummy modules in sys.modules?

我的回答:

import sys
for n in filter(lambda x: x.startswith('demo') and x != 'demo', sys.modules):
    del(sys.modules[n])
reload(demo)