我正在为我的团队开发一个Jupyter Notebook,用于编目和分析一些专有数据。我已经准备好与团队分享它,以便进行持续的执行和开发。该团队通常拥有Windows 10工作站,并且是熟练的工程师,但不是数据科学家。目前没有人使用Jupyter。
我现在意识到我可能彻底误判了Jupyter支持这种工作环境的能力。
选项1:单独安装
这是最糟糕的情况。任何想要运行或修改笔记本的人都需要安装Jupyter。蟒蛇可能是最好的方式,但它是一个大的,丑陋的,可怕的安装。更糟糕的是,每个用户都必须安装和管理其他库。任何需要更改内核的笔记本更改都必须手动应用于每个安装。
当然,作为客户服务器,这不是Jupyter的意图。
选项2:一台服务器,多台客户
显而易见的替代方案是在网络可访问的计算机上托管Jupyter服务器,并让所有用户通过浏览器连接到它。这样,只需要管理一个共享安装,每个用户只需要一个URL来访问它。
但是有一个问题 - 服务器希望笔记本电脑在自己的文件系统上!因此每个用户都将访问相同的笔记本文件。这使得版本控制非常有问题 - 没有人可以检查他们自己的笔记本副本以进行独立的编辑和提交会话。相反,更改将覆盖唯一的副本,并且必须在服务器上(或通过安装服务器的文件系统)完成提交/恢复/差异。
选项3:Docker镜像中的服务器,每个用户都运行一个容器
Docker救援?这样我们就可以构建/维护一个服务器映像(甚至版本控制它),每个用户只需要安装一个Docker引擎来实例化映像(这是一个友好的8GB下载!!)。他们连接到他们自己的容器,通过一些脚本欺骗,将指向他们自己的笔记本副本。
此选项只需花费20个小时进行调查,然后才发现它从根本上说很糟糕。使用内核很棘手,需要很多新技能。但是更多的showstopping - 没有任何显示Qt窗口的东西都可以工作。 qtconsole我们可以不用,但是我们笔记本的一部分显示了一个File Open对话框,最好的方法是使用Qt Widget。由于Docker Container中的服务器需要X Windows环境,而Windows客户端中的客户端无法显示Widget。
Qt问题是试图让Docker选项运行的许多问题中的最后一个。从matplotlib到路径映射,从os
库调用到ipywidgets的所有内容都需要进行调查,调整,Google搜索,切割和更改才能工作。我相信这些剧集会继续进行。
结论
围绕Jupyter version control进行了大量讨论。 read-only sharing有很多选项。甚至还有project用于运行时构建Docker容器以提供对笔记本的可执行访问。但是在团队环境中使用Jupyter的建议很少。
鉴于服务器本身并非与客户端在同一台计算机上运行时出现了无穷无尽的复杂情况,我开始相信选项1 是唯一理智的方式。在我用蹩脚的新闻告诉同事之前,还有其他建议吗?
答案 0 :(得分:0)
结束了对Jupyter Google Group的富有成果的讨论,并确认开箱即用,Jupyter不支持这种工作环境。实际上,至关重要的是,Jupyter希望服务器只有一个用户。
最有前途的DIY解决方案首先是部署JupyterHub,原因有两个:
其次,让服务器挂载每个用户的文件系统(或等效的网络架构),这样它就可以将用户指回给他们自己的本地文件。
我还没有实施这个策略(现在正在使用选项1!)但它确实有意义。