【问题标题】:How to get ipywidgets working in Jupyter Lab?如何让 ipywidgets 在 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控制台也很有用
  • 你在尝试什么版本?
  • 如果内核已经在运行,你是否重启过?

标签: python ipython jupyter ipywidgets jupyter-lab


【解决方案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)

      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)

      【讨论】:

        【解决方案6】:

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

        1. ipywidgets==7.6jupyterlab&gt;=3.0 开始,不再需要jupyter labextension install @jupyter-widgets/jupyterlab-managersource。如果您使用的是最新版本的 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 中工作。

        2. 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://stackoverflow.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 二进制分发包:强烈推荐它们支持您的特定操作系统。它们将是最新的,应该会带来最少的麻烦。

              【讨论】:

                猜你喜欢
                • 2019-04-27
                • 2018-05-29
                • 2019-11-11
                • 1970-01-01
                • 1970-01-01
                • 2021-06-16
                • 2022-06-11
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多