【发布时间】: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,但您的扩展是您的内核会话的属性)
我已经想到了以下两种次优的解决方案:
- Environment.yaml 和 startup.sh
我不喜欢这个,它确实解决了这个问题,但它不是一个干净的方法。从公共 git repo 运行任何旧的 shell 脚本总是一个坏主意(安全性)。此外,了解 shell 脚本的人与使用笔记本的人不同,这使得共享此解决方案变得更加困难。
- 很好的 ipython 魔法
import sys
!jupyter nbextension enable xyz...
sys._exit(00)
再次,不是最大的粉丝,这会杀死笔记本中的“运行所有单元”操作,而且感觉非常笨重。
人们的想法和建议将不胜感激!
【问题讨论】:
标签: docker anaconda jupyter jupyter-lab jupyterhub