【发布时间】:2018-06-10 19:32:06
【问题描述】:
目标
我想从解释器中导入一个自定义模块,运行它,修改它,重新加载它,然后再次运行它以查看更改。
背景
我正在使用 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) 时,它不会抛出错误,但绘图的颜色不会更新为红色。
我该如何解决这个问题?
我不希望每次修改几行代码时都必须关闭并重新启动解释器。
【问题讨论】:
-
但我的问题是为什么您不将颜色作为参数添加到
plot()函数?这样您就可以随心所欲地通过那里? -
对于您的问题,您需要在
reload(...)之后再次导入模块。阅读python refresh/reload -
对于这个简单的例子,我可以这样做。但是,如果我决定让“plot()”函数编写文本而不是绘图,那将是完全不同的事情。
-
@MoinuddinQuadri 我不是 100% 关注的。请您提供确切的代码供我尝试吗?谢谢。
-
@MoinuddinQuadri 我将
\__init__.py更改为from .plotme import plotreload(plotme)from .plotme import plot,它似乎正在工作。谢谢!虽然它确实有效,但有没有更好的方法来做到这一点? (向 cmets 添加代码时遇到问题...)
标签: python python-2.7 python-import python-module