ipydatagrid 小部件不显示在 SageMaker Studio 中

ipydatagrid widget does not display in SageMaker Studio

问题

我有一个带有 ipydatagrid 显示数据框的小部件的 jupyter 笔记本。此笔记本在本地 运行 时正常工作,但在 AWS SageMaker Studio 中 运行 时无法正常工作。在 SageMaker Studio 中 运行 时,它不显示小部件,而是只显示文本 Loading widget...

如何在 SageMaker Studio 环境中使用 ipydatagrid 小部件?

详情

Python版本:

$ python --version
Python 3.7.10

运行 开始时:

$ pip install -r requirements.txt
$ jupyter nbextension enable --py --sys-prefix widgetsnbextension
$ jupyter nbextension install --py --symlink --sys-prefix ipydatagrid
$ jupyter nbextension enable --py --sys-prefix ipydatagrid

文件requirements.txt:

ipydatagrid==1.1.11
pandas==1.0.1

笔记本内容:

# %%
import pandas as pd
from ipydatagrid import DataGrid
from IPython.display import display
import ipywidgets

# %%
data = [
    ("potato", 1.2, True),
    ("sweet potato", 0.8, False),
    ("french fries", 4.5, True),
    ("waffle fries", 4.9, True)
]
df = pd.DataFrame(
    data,
    columns=["food", "stars", "is_available"]
)

# %%
grid = DataGrid(df)

# %%
display(grid)

# %%
# SANITY CHECK:
button = ipywidgets.Button(
    description="Button",
    disabled=False
)
def on_click(b):
    print("CLICK")
button.on_click(on_click)
display(button)

错误信息

如果我使用 Google Chrome 开发人员工具,我可以在浏览器中看到更多的日志,这些日志给出了一些错误消息,其中大部分是重复的:

manager.js:305 Uncaught (in promise) Error: Module ipydatagrid, semver range ^1.1.11 is not registered as a widget module
    at C.loadClass (manager.js:305:19)
    at C.<anonymous> (manager-base.js:263:46)
    at l (manager-base.js:44:23)
    at Object.next (manager-base.js:25:53)
    at manager-base.js:19:71
    at new Promise (<anonymous>)
    at Rtm6.k (manager-base.js:15:12)
    at C.e._make_model (manager-base.js:257:16)
    at C.<anonymous> (manager-base.js:246:45)
    at l (manager-base.js:44:23)
utils.js:119 Error: Could not create a model.
    at n (utils.js:119:27)
    at async C._handleCommOpen (manager.js:61:51)
    at async v._handleCommOpen (default.js:994:100)
    at async v._handleMessage (default.js:1100:43)
manager-base.js:273 Could not instantiate widget

但是,没有明显的错误消息对用户来说是显而易见的,包括在 print 语句发送其输出的日志中。

SageMaker Studio 当前运行 JupyterLab v1.2(已通过 帮助 > 关于 JupyterLab 确认),并且根据 ipydatagrid installation instructions、current/recent 版本小部件需要 v3+... 所以我认为这很可能是您的问题 - 因为这些主要版本之间的扩展接口发生了重大变化。

我快速浏览了 ipydatagrid 的过去版本,看看是否可以使用旧版本,并且似乎在 v0.2.16 and v1.0.1 之间添加了记录的 JLv3 要求(这是相邻 GitHub).

但是,0.2 中记录的旧安装说明似乎不再有效:我得到 ValueError: "jupyter-datagrid" is not a valid npm package 并且还注意到版本 <1.0 似乎不存在 on PyPI

所以不幸的是,我认为(unless/until SM Studio 获得了 JupyterLab 版本升级),除非您从旧的源代码版本开始构建它,否则这个小部件不太可能工作。