为什么 ipython 在装饰交互时返回 NameError?

Why is ipython returning NameError while decorating interact?

我被指派在 Sage 项目中使用 @interact。 class 注释中提供的代码是:

@interact
def show_crank(angle = slider(0,2*pi,pi/20,pi/10,label='angle')):
    center = (0,0)
    endpnt = (cos(angle),sin(angle))
    pltcnt = point(center, size = 50)
    pltend = point(endpnt, size = 50)
    crank = line([center,endpnt])
    (pltcnt + crank + pltend).show(xmin=-1,xmax=1,ymin=-1,ymax=1)

但是,当我尝试 运行 这个时,

NameError: name 'interact' is not defined

返回。我目前正在使用 Jupyter 实验室。使用 Python 3 或 Sage 内核会导致同样的问题。

我已经阅读了向我建议的文章,但我没有想到任何解决方案。以下是留给后人的文章:

  • 确保 ipywidgets 已安装。
  • 激活小部件:jupyter nbextension enable --py widgetsnbextension
  • 对于 Jupyter Lab 使用:jupyter labextension install @jupyter-widgets/jupyterlab-manager
  • 最后:import ipywidgets as widgetsfrom ipywidgets import *

这解决了问题的一部分,但没有解决另一个问题。

def show_crank(angle = slider(0,2*pi,pi/20,pi/10,label='angle')):

提示NameError:name 'slider' is not defined。使用 Jupyter Lab 时,正确的函数调用是 FloatSlider.

编辑:感谢 Will Koehrsen