如何让 ipywidget 在木星实验室工作?

在木星笔记本中,ipywidgets 工作得很好,但是在木星实验室(据说比笔记本更好)似乎不能工作。

我跟踪了这些 方向

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

步骤2: 使用 conda 安装 Python 3的需求:

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

不幸的是,基本的小部件不能在木星实验室的笔记本里工作:

enter image description here

65626 次浏览

木星实验室现在更喜欢将 任意的 javascript 不再被允许嵌入到单元输出中的模型,这就是过去使用的交互式木星笔记本模块的数量。他们现在要求 具有交互性的模块创建了 Jupiter 实验室扩展。 Ipywidgets 提供了满足此需求的 @jupyter-widgets/jupyterlab-manager扩展。

当在 Jupiter YterLab 3.0或更新版本中使用 ipywidgets 7.6或更新版本时,您不需要做任何事情: 它是 默认安装。您可以通过运行以下命令来检查是否已安装:

jupyter labextension list

其中应该包括这样一行:

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

如果您正在使用 Jupiter yterLab 1或2(或旧版本的 ipywidgets) ,您需要通过在命令行上运行这个扩展来安装 手动操作(假设您已经安装了 NodeJS) :

jupyter labextension install @jupyter-widgets/jupyterlab-manager

我有同样的 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

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

UP (根据评论) : 你可以检查 jupyter lab --version并在 它的版本兼容性上找到匹配。

现在起作用了!

enter image description here

遇到了同样的问题,今天对我有效的是运行“ clean”命令,正如这里提到的: https://ipywidgets.readthedocs.io/en/latest/user_install.html#installing-the-jupyterlab-extension

所以:

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

刚才我就是这么想的。

我得到了一个 Permission Denied错误,因此将 sudo添加到已接受的命令有所帮助: sudo jupyter labextension install @jupyter-widgets/jupyterlab-manager

其他的答案对我都不管用。这一切似乎都取决于版本兼容性。终于起作用了-看下面。 所有功劳归于 github 上的@hainm (原始链接: https://github.com/jupyter-widgets/ipywidgets/issues/2488#issuecomment-509719214) 我对此的回答是: https://stackoverflow.com/a/60059786/1021819 以下是这个答案的直接副本:

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

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 笔记本中,点击重新启动内核按钮。

重要提示: 不要忘记浏览器页面也是 刷新-否则所有的努力都将是徒劳的

然后执行这个例子:

from ipywidgets import interact


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

我从来没有想过我会活着看到这一天,但是-嘿,突然-小工具终于出现了!

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

enter image description here

根据 Ipywidgets.readthedocs.io文档(安装 Jupiter 实验室扩展) ,对于“ 木星实验室”,在“ 蟒蛇提示”中执行以下步骤。

第一步

conda install -c conda-forge nodejs

第二步

jupyter labextension install @jupyter-widgets/jupyterlab-manager

如果你使用的是 linux 和 你宁愿完全避开 Conda,并且使用虚拟 envs (venvs)来让 python 满意,而且你碰巧使用的是一个基于‘ old’/LTS Debian 的操作系统,它可能没有更新的 nodejs: 比如,Ubuntu 16.04 LTS,它没有 node而是有 nodejs(node属于另一个软件包,而‘遗留的 nodejs’版本太旧了) ,那么请继续读下去。

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

要点如下:

  • 使用 PPA 来获得你需要的东西的新版本
  • 使用 viralenvwrapper,这样你就可以:
    • 使用最新的 python3
    • 避免弄乱你的“ pip 安装”
    • 避免混淆系统包管理器
    • 也很容易与不同版本的 python 的人一起工作
    • 最佳实践
    • 很容易有不同的 venvs,可能有旧的或不兼容的 python 和 pip 包。
  • 使用 < a href = “ https://github.com/nodessource/distribution”rel = “ nofollow noReferrer”> Nodejs 二进制发行版
    • 需要 node.js 版本“10.x”的 jupyterlab 小部件
    • 允许使用系统的包管理器来保持 nodejs 的新鲜
    • 将维持和可用,只要 LTS 的

因此,所有的实际步骤(这些都在 Linux Mint 18.3 Sylvia 上进行了测试,Sylvia 基本上与 Ubuntu Xenial 又名 Ubuntu 16.04 LTS 兼容。差异主要出现在 nodejs 中,请阅读上面 github 链接中的自述文件来解决其他操作系统的问题) :

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

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,最终都被干净利落地分离(并与系统包分离) ,这使得所有内容都能很好地工作。

有一些基本的应该做和不应该做的事情:

  • 不要运行 pip install ...线没有在一个虚拟的
  • 不要使用 pip3代替 pip
  • 只使用 python而不使用 python3在内部运行。
  • 不要使用 conda...
  • 要知道你可以立刻更新所有的虚拟世界:
    • allvirtualenv pip install -U pip

至于 nodejs 二进制发行包: 强烈推荐它们支持您的特定操作系统。他们会非常及时,并应提出最小的麻烦。

我和@jtlz2有同样的问题,除了@hainm 针对 jupyter-lab、 ipywidgest 和 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、 labmanager、 ipywidgets、 nodejsversion)

  1. (3.7,0.34,0.37,7.4.2,10.13)
  2. (3.7,1.0.1.0,7.4.2,10.13)
  3. (3.7,2.0,2.0,7.4.2,10.13)
  4. (3.8,2.0,2.0,7.4.2,10.13)
  5. (3.8,2.0,2.0,7.5.1,10.13)
  6. (3.8,2.1.5,2.0,7.5.1,10.13)

注: 以上大部分答案已过时(截至2021年7月19日)。它应该与这些软件包的最新版本更加无缝。然而,在2021年,我在 Jupyterlab 中遇到了一个渲染 panel小部件的问题,这个小部件托管在 Jupyterhub 上,我偶然发现了这篇文章。起初我尝试了其中的几个答案,但没有一个奏效。在深入研究了一些图书馆之后,我发现了以下几点:

  1. ipywidgets==7.6jupyterlab>=3.0开始,不再需要 jupyter labextension install @jupyter-widgets/jupyterlab-manager来源.如果您使用的是最新版本的 jupyterlab,那么您只需要安装 ipywidgets,只要小部件扩展作者也是 遵循一些步骤,扩展就会自动启用。

    这个版本的主要变化是,安装 ipywidgets 7.6.0将自动启用 Jupiter yterLab 3.0中的 ipywidgets 支持ーー用户不需要额外的 Jupiter yterLab 安装步骤,也不需要重新安装 Jupiter yterLab,也不需要安装 Node.js。只需要简单地用 pip (pip install ipywidgets = = 7.6.0)或 conda/mamba (conda install-c conda-forgeipywidgets = 7.6.0)安装 python ipywidgets 包,ipywidgets 就会自动在经典的 Jupiter 笔记本和 Jupiter yterLab 3.0中工作。

  2. panel也跟着做,并捆绑在 pyviz_comms包必要的扩展,所以理论上一切应该包括在我的情况。< a href = “ https://pypi.org/project/panel/”rel = “ noReferrer”> source

    在经典的 Jupiter 笔记本环境和 Jupiter 实验室中,首先确保加载 pn.extension ()。然后,如果面板对象是笔记本单元格中的最后一个项目,面板对象将呈现自己。对于 jupyterlab > = 3.0的版本,必要的扩展会自动绑定到 pyviz _ comms 包中,该包必须 > = 2.0。

我的问题的答案是,我正在安装 panel 之后,通过 jupyterhub 构建 jupyterlab 服务器。(例如,对于一个特定的笔记本,用户正在运行 !pip install panel)。这是我有点模糊,因为我不知道为什么这不工作,因为 ipywidgets已经安装和 panel安装包括预先构建的 jupyterlab 扩展。然而,我能够通过使用一个 jupyterlab 映像从 jupyterhub 中产生来解决我的问题,这个映像预先安装了 ipywidgets>=7.6panel>=0.11.3(因此也预先安装了 pyviz_comms>=2.0)。此后,Jupyterhub 上的 jupyterlab 中的面板小部件现在可以工作了。希望这对有类似问题的人有所帮助。

请检查步骤,使其工作在木星3.0 医生

请检查步骤,使其工作在木星10或2 医生

在此之后重新启动或建立实验室,以查看变化

除此之外,还有 确保您的 ipywidget 安装在与 jupyterlab 相同的 conda 环境中

下面是我的故事(ipywidgets 7.7.0,jupyterlab 3.2.5通过 conda inside docker 安装) :

  1. 在基本 conda 环境中运行停靠的 jupyterlab
  2. 创建新的 conda 环境,安装 ipykernel,使其对 jupyterlab可见,安装 ipywidgets
  3. 切换到新的内核,现在 jupyterlab认可 ipywidgets作为安装,但小部件不工作(只显示文本小部件描述) ,这是令人困惑的

解决方案:

  • 在与 jupyterlab 相同的 conda 环境中安装 ipywidget

免责声明: 我的回答可能不适用于原来的问题,因为作者没有使用单独的 conda 环境。但对于其他面临类似问题的人来说,它可能是有用的。