【问题标题】:Is there a true configuration as code for jupyter notebook/labs?jupyter notebook/labs 的代码是否有真正的配置?
【发布时间】:2020-06-30 10:10:11
【问题描述】:

所以我有一个 jupyterhub-esk 安装,我正在旋转运行 jupyter lab 或 jupyter notebooks 的容器(取决于用户的选择)。启动时,容器基本上会执行 git clone,使我能够选择我的一个 git 存储库并在几分钟内启动一个工作的 jupyterlab 环境,其中包含所有内容。

直到最近,我的 dockerfile 中有一个很大的预安装库列表,随着我对各种项目的添加需求而增长。然而,这一切都变得相当难以管理,构建的 docker 映像接近 4GB(哎呀!)。

我决定采用配置即代码的方法 - 每个 git 存储库都将在根目录下拥有自己的 environment.yaml(这是conda env),它将在运行时安装和激活容器旋转起来。每个 repo 都有责任“了解”其要求。这将权衡容器大小的启动时间,并且在我专门构建的图像之外使事情更具可重复性!

但是我遇到了以下问题:

  • 我的大多数笔记本都需要一个或另一个插件(gmaps/widgets/etc)
  • jupyter 实验室的插件对实验室的特定版本非常敏感(配置即代码的主要候选者)
  • 通过environment.yaml可以正常安装插件,但默认无法激活!
  • 这意味着每次我启动 jupyter 环境时,都会有大约 5 分钟的时间来搞乱更多的配置!!更糟糕的是,这个项目的整个想法是让我可以将链接发送给不“知情”的人 - 他们可以在其中配置包含我的笔记本的环境,并在几分钟内准备好使用。

是否有一个简单的配置即代码解决方案,它可以同时执行 python/conda 包和 jupyter 扩展? 我知道这两者在某些方面是正交的(您可以交换 conda env,但您的扩展是您的内核会话的属性)

我已经想到了以下两种次优的解决方案:

  1. Environment.yaml 和 startup.sh

我不喜欢这个,它确实解决了这个问题,但它不是一个干净的方法。从公共 git repo 运行任何旧的 shell 脚本总是一个坏主意(安全性)。此外,了解 shell 脚本的人与使用笔记本的人不同,这使得共享此解决方案变得更加困难。

  1. 很好的 ipython 魔法
import sys
!jupyter nbextension enable xyz...
sys._exit(00)

再次,不是最大的粉丝,这会杀死笔记本中的“运行所有单元”操作,而且感觉非常笨重。

人们的想法和建议将不胜感激!

【问题讨论】:

    标签: docker anaconda jupyter jupyter-lab jupyterhub


    【解决方案1】:

    在 GitHub 的 official repository 中有一些现成的 Jupyter Notebook Docker 镜像,如果你错过了,我建议你看看它们来解决你的问题。

    AFAIK,在自动配置 Jupyter Notebooks 方面有一些工作要做,例如 here,它自己解决了一个安装所有必需组件的 bash 脚本。

    【讨论】:

    • dockerstacks 是一个很好的起点,但对配置为代码没有帮助。我曾经使用它们作为我的起点,但最近已经转移到自定义构建映像,以便更好地控制安装位置。 terraform 也很棒,但不能解决将笔记本扩展安装到 ipython 内核的问题
    猜你喜欢
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2020-02-15
    相关资源
    最近更新 更多