如何让 ipywidgets 在 Jupyter Lab 中工作?

Posted

技术标签:

【中文标题】如何让 ipywidgets 在 Jupyter Lab 中工作?【英文标题】:How to get ipywidgets working in Jupyter Lab? 【发布时间】:2018-09-07 14:32:15 【问题描述】:

在 Jupyter Notebook 中,ipywidgets 可以正常工作,但在 Jupyter Lab 中似乎无法正常工作(据说比 Notebook 更好)。

我关注了这些directions。

第 1 步: 安装 Node.js (https://nodejs.org/en/)

第 2 步:在 Python 3 上使用 conda 安装要求:

conda install -c conda-forge ipywidgets
jupyter labextension install @jupyter-widgets/jupyterlab-manager

很遗憾,基本小部件在 jupyter 实验室笔记本中不起作用:

【问题讨论】:

查看浏览器的javascript控制台也很有用 你在尝试什么版本? 如果内核已经在运行,你是否重启过? 【参考方案1】:

JupyterLab 现在更喜欢将 arbitrary javascript is no longer allowed 嵌入到单元格的输出中的模型,这是用于工作的交互式 Jupyter Notebook 模块的数量。他们现在问modules with interactivity create a JupyterLab extension。 ipywidgets 提供了满足这个要求的@jupyter-widgets/jupyterlab-manager 扩展。

在 JupyterLab 3.0 或更高版本中使用 ipywidgets 7.6 或更高版本时,您无需执行任何操作:它是 installed by default。您可以通过运行检查是否已安装:

jupyter labextension list

其中应包括如下一行:

@jupyter-widgets/jupyterlab-manager v3.0.0 enabled OK (python, jupyterlab_widgets)

如果您使用的是 JupyterLab 1 或 2(或旧版本的 ipywidgets),您需要通过在命令行上运行此扩展程序 manually 来安装此扩展程序(假设您已经安装了 NodeJS):

jupyter labextension install @jupyter-widgets/jupyterlab-manager

【讨论】:

这也解决了qgrid不显示的以下错误,但只显示QgridWidget(grid_options='fullWidthRows': True, 'syncColumnCellResize': True,。我添加了评论以使其更容易找到,因为此错误的其他解决方案都不适用于我。谢谢 对我不起作用 - 错误:在注册表中找不到对象“jupyter.widget” 我不得不运行这个命令两次。两次输出是相同的 - 没有错误。很确定我正确地重新启动了一切,但谁知道呢。奇怪。 YMMV。【参考方案2】:

我有相同的 pbm,并尝试了这个解决方案(希望它可以帮助其他人):

jupyter labextension install @jupyter-widgets/jupyterlab-manager 在我的情况下给出了这种错误:

> /Users/user/.nvm/versions/node/v8.7.0/bin/npm pack @jupyter-widgets/jupyterlab-manager
jupyter-widgets-jupyterlab-manager-0.35.0.tgz

Errored, use --debug for full output:
ValueError:
"@jupyter-widgets/jupyterlab-manager@0.35.0" is not compatible with the current JupyterLab
Conflicting Dependencies:
JupyterLab              Extension            Package
>=0.15.4-0 <0.16.0-0    >=0.16.0-0 <0.17.0-0 @jupyterlab/application
>=1.1.4-0 <2.0.0-0      >=2.0.0-0 <3.0.0-0   @jupyterlab/services
>=0.15.4-0 <0.16.0-0    >=0.16.0-0 <0.17.0-0 @jupyterlab/rendermime
>=0.15.4-0 <0.16.0-0    >=0.16.0-0 <0.17.0-0 @jupyterlab/notebook

然后,我所做的是使用以前的版本 0.34 而不是 0.35: jupyter labextension install @jupyter-widgets/jupyterlab-manager@0.34

事实上,根据this,有时团队有时间考虑最后一个版本。

UP(根据 cmets): 您可以查看jupyter lab --version 并在its version compatibility 上找到匹配项。

现在可以使用了!

【讨论】:

可以查看jupyter lab --version 的版本并在此version compatibility 上找到匹配项。 这条评论是我最喜欢的答案:)。 对我不起作用 - 错误:在注册表中找不到对象“jupyter.widget” 这对我有用,非常感谢!似乎该问题与软件包版本依赖关系有关。【参考方案3】:

遇到了同样的问题,今天对我有用的是运行“清理”命令,如下所述:https://ipywidgets.readthedocs.io/en/latest/user_install.html#installing-the-jupyterlab-extension

所以:

jupyter lab clean
jupyter labextension install @jupyter-widgets/jupyterlab-manager

这让它刚刚适合我。

【讨论】:

【参考方案4】:

我收到了Permission Denied 错误,因此将sudo 添加到接受的命令有助于:sudo jupyter labextension install @jupyter-widgets/jupyterlab-manager

【讨论】:

【参考方案5】:

我和@jtlz2 有同样的问题,除了@hainm 的 jupyter-lab、ipywidgests 和 jupyter-widgets/jupyterlab-manager 的非常具体的版本组合之外,上述建议都不适合我。

按照这篇文章 (https://github.com/jupyter-widgets/ipywidgets/issues/2488#issuecomment-509719214) 中列出的初始版本号,我试图找到最新的有效版本组合。我在下面列出了它们,这样如果真的没有其他东西对他/她有用,可以尝试一下。

pythonversion=3.8.0
labversion=2.1.5
labmanagerversion=2.0
ipywidgetsversion=7.5.1
nodejsversion=10.13.0

conda create -n lab python=$pythonversion -y
source activate lab
conda install nodejs=$nodejsversion -c conda-forge -y
conda install ipywidgets=$ipywidgetsversion -c conda-forge -y
conda install jupyterlab=$labversion  -y -c conda-forge
jupyter-labextension install @jupyter-widgets/jupyterlab-manager@$labmanagerversion

看来nodejs的版本起了关键作用。保持一切平等,如果我将 nodejsversion 更新为 12.x+ 或最新的 14.x,这种组合以及 @hainm 的组合都无法使 ipywidgets 在 Jupyterlab 中正常运行。

除了我在上面的代码单元中列出的那一种之外,以下 6 种组合也适用于我。

(pythonversion ,labversion ,labmanagerversion ,ipywidgets ,nodejsversion)

    (3.7 , 0.34 , 0.37 , 7.4.2 , 10.13) (3.7 , 1.0 , 1.0 , 7.4.2 , 10.13) (3.7、2.0、2.0、7.4.2、10.13) (3.8、2.0、2.0、7.4.2、10.13) (3.8、2.0、2.0、7.5.1、10.13) (3.8、2.1.5、2.0、7.5.1、10.13)

【讨论】:

【参考方案6】:

注意:以上大部分答案已过时(截至 2021 年 7 月 19 日)。它应该与这些软件包的最新版本更加无缝。但是,在 2021 年,我在 jupyterhub 上托管的 jupyterlab 中渲染 panel 小部件时遇到了问题,并遇到了这篇文章。起初我尝试了其中一些答案,但没有一个有效。在挖掘了一些库之后,我发现了以下内容:

    ipywidgets==7.6jupyterlab&gt;=3.0 开始,不再需要jupyter labextension install @jupyter-widgets/jupyterlab-manager。 source。如果您使用的是最新版本的 jupyterlab,您只需要安装 ipywidgets,只要小部件扩展作者也 follow some steps,该扩展就会自动启用。

    此版本的主要变化是安装 ipywidgets 7.6.0 现在将自动启用 JupyterLab 3.0 中的 ipywidgets 支持——用户没有额外的 JupyterLab 安装步骤,也没有重建 JupyterLab,也不需要安装 Node.js。只需使用 pip (pip install ipywidgets==7.6.0) 或 conda/mamba (conda install -c conda-forge ipywidgets=7.6.0) 安装 python ipywidgets 包,ipywidgets 将自动在经典 Jupyter Notebook 和 JupyterLab 3.0 中工作。

    panel 也效仿并在 pyviz_comms 包中捆绑了必要的扩展,所以理论上我的情况应该包含所有内容。 source

    在经典的 Jupyter notebook 环境和 JupyterLab 中,首先确保加载 pn.extension()。如果面板对象是笔记本单元格中的最后一项,则面板对象将呈现自己。对于 jupyterlab>=3.0 的版本,必要的扩展会自动捆绑在 pyviz_comms 包中,该包必须 >=2.0。

我的问题的答案原来是我在安装panel之后通过jupyterhub构建了jupyterlab服务器。 (例如,对于特定的笔记本,用户正在运行 !pip install panel)。这是我有点模糊的地方,因为我不确定为什么这不起作用,因为 ipywidgets 已经安装并且 panel install 包括预构建的 jupyterlab 扩展。但是,我能够通过使用 jupyterlab 图像从预安装了 ipywidgets&gt;=7.6panel&gt;=0.11.3(因此 pyviz_comms&gt;=2.0)的 jupyterhub 生成来解决我的问题。在此之后,jupyterhub 上的 jupyterlab 中的面板小部件现在可以工作了。希望这对遇到类似问题的人有所帮助。

【讨论】:

【参考方案7】:

根据ipywidgets.readthedocs.io 文档 (Installing the JupyterLab Extension),对于“JupyterLab”,请在“Anaconda Prompt”中执行以下步骤。

第 1 步

conda install -c conda-forge nodejs

第 2 步

jupyter labextension install @jupyter-widgets/jupyterlab-manager

【讨论】:

【参考方案8】:

其他答案都没有对我有用。这一切似乎都取决于版本兼容性。终于让它工作了——见下文。 所有功劳归于 github 上的@hainm(原始链接:https://github.com/jupyter-widgets/ipywidgets/issues/2488#issuecomment-509719214) 我对此的回答:https://***.com/a/60059786/1021819 这是该答案的直接副本:

利用 https://github.com/jupyter-widgets/ipywidgets/issues/2488#issuecomment-509719214,在 jupyterlab 终端中 - 在 jupyterhub 上运行 - 执行:

pythonversion=3.7
labversion=0.34.12
labmanagerversion=0.37.4
ipywidgetsversion=7.4.2

conda install ipywidgets=$ipywidgetsversion -c conda-forge -y --override-channels -c main
conda install jupyterlab=$labversion  -y -c conda-forge --override-channels -c main
jupyter-labextension install @jupyter-widgets/jupyterlab-manager@$labmanagerversion

此时jupyter lab clean; jupyter lab build 可能会引起人们的兴趣。

然后在同一个 jupyterlab 窗口中运行的 .ipynb 笔记本中,点击重启内核按钮。

重要提示:不要忘记同时REFRESH浏览器页面 - 否则所有努力都将付诸东流。 :\

然后执行例子:

from ipywidgets import interact

@interact(x=(0, 100, 10))
def p(x=50):
    pass

我从没想过我会活着看到这一天,但是 - 嘿转眼间 - 小部件终于出现了!

可悲的是设置对其他扩展的安装非常敏感,并且兼容版本的组合非常具体。

【讨论】:

【参考方案9】:

如果您使用的是 linux 并且 您宁愿完全避免使用 conda,并使用虚拟环境 (venvs) 来让 python 满意,并且您碰巧使用的是“旧”/LTS Debian基于操作系统,可能没有最新的nodejs:即Ubuntu 16.04 LTS,没有node,而是nodejsnode属于另一个包,'legacy nodejs'版本太旧了),然后继续阅读。

设置起来有点复杂,但比 conda 更容易长期维护。 (您可以随时为新项目创建一个新的venv,而不会破坏您的旧项目)。

要点是:

使用 PPA 获取所需内容的新版本 使用 virtualenvwrapper,您可以: 使用最新的python3 避免弄乱您的“pip install” 避免混淆系统包管理器 还可以轻松地与使用不同版本 python 的人合作 遵循 python 最佳实践 很容易拥有不同的 venv,这些 venv 可能包含旧的或不兼容的 python 和 pip 包。 使用Nodejs binary distributions jupyterlab 小部件需要 node.js 版本“10.x” 允许使用系统的包管理器来保持 nodejs 的新鲜度 只要 LTS 存在,就会得到维护和使用

所以,所有实际步骤(这些都经过测试可在 Linux Mint 18.3 Sylvia 上运行,它基本上与 ubuntu xenial aka Ubuntu 16.04 LTS 兼容。差异主要出现在 nodejs 中,请阅读上面 github 链接中的自述文件以解决其他操作系统):

找一个管理员来做(或者如果你可以sudo,你自己做):

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install -y python3.8 python3.8-dev python3.8-distutils python3-pip python3-venv
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs

然后,作为您自己的用户,您可以完成其余步骤:

pip3 install --user virtualenv virtualenvwrapper
mkdir ~/.envs

然后,您需要将以下内容添加到 .bashrc 的末尾:

export PATH=~/.local/bin:$PATH
export WORKON_HOME=~/.envs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source ~/.local/bin/virtualenvwrapper.sh

此时,创建一个新的 shell,您将能够运行其余的设置,实际安装 jupyterlab:

mkvirtualenv -p python3.8 jupenv
pip install jupyter matplotlib pandas ipympl tqdm
jupyter labextension install @jupyter-widgets/jupyterlab-manager

现在你已经完成了。

要打开/使用 jupyter,你需要(因为上面我称之为 jupenv 的 venv,你可以在 mkvirtualenv 行中随意命名):

workon jupenv
jupyter lab

否则,我将无休止地试图让 nodejs 与过时的 ubuntu 包一起工作。有时它会工作,重新启动几次,然后失败。其他时候它会一直给我同样缺失的小部件,或者有时是几行垃圾 js 代码。

Virtualenvs 非常值得使用,尤其是当您开始认真使用 python 并与可能使用不同版本/不同 pip 包集的其他人一起工作时。 VirtualEnvWrapper 让这一切变得非常轻松。 基本的一点是,你“pip install”的所有东西,甚至是 jupyter,最终都会被完全分开(并且与系统包分开),这让所有东西都能很好地工作。

有一些基本的注意事项:

不要在未进入 venv 的情况下运行 pip install ... 行 不要在 venv 中使用 pip3 代替 pip。 只使用python 而不是python3 在其中运行。 不要使用conda...! 请注意,您可以通过以下方式一次更新所有 virtualenvs: allvirtualenv pip install -U pip

至于 nodejs 二进制分发包:强烈推荐它们支持您的特定操作系统。它们将是最新的,应该会带来最少的麻烦。

【讨论】:

以上是关于如何让 ipywidgets 在 Jupyter Lab 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在从 docker 容器运行的 jupyter 笔记本中获取黑色代码格式?

如何让 Jupyter Notebook 自动导入代码?

如何让Jupyter Notebook支持虚拟运行环境?

Jupyter Notebook 如何让一个Cell 可以同时输出多个语句的值?

无法让 Jupyter 读取 CSV 文件 - 错误 - 找不到文件

如何使jupyter显示行号并自动补全代码