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 版本升级),除非您从旧的源代码版本开始构建它,否则这个小部件不太可能工作。
问题
我有一个带有 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 版本升级),除非您从旧的源代码版本开始构建它,否则这个小部件不太可能工作。