目标
我想从解释器导入自定义模块,运行它,修改它,重新加载它,然后再次运行它以查看更改。
背景
我正在使用python 2.7。在我开始编写自己的模块之前,我充分利用了python 2.7中的reload()
函数。
我在一个简单的例子中重现了我的问题
demo
demo
内,我放置了两个文件:__init__.py
和plotme.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)
时,它不会抛出错误,但是绘图的颜色不会更新为红色。
我该如何解决这个问题?
每次修改几行代码时,我宁愿不必关闭并重新启动解释器。
答案 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)