创建/分发基于 Jupyter Notebook/JupyterLab 的独立应用程序的最佳方式?
Posted
技术标签:
【中文标题】创建/分发基于 Jupyter Notebook/JupyterLab 的独立应用程序的最佳方式?【英文标题】:Best way to create/distribute a stand alone app based on Jupyter Notebook/JupterLab? 【发布时间】:2018-08-26 23:48:55 【问题描述】:我为神经科学实验室正在使用的数据分析管道构建了一个相当复杂的图形用户界面。我使用ipywidgets
和各种交互式绘图库(例如散景)在 Jupyter Notebook 中使用 Python 构建了它。它基本上只是现有 Python 分析包的 GUI,但许多研究人员没有任何或足够的编程技能来使用它,因此需要 GUI。
问题在于这是一个相当复杂的设置过程。您必须安装 anaconda、安装一堆库、启动 Jupyter 笔记本服务器等。此安装过程对于技术技能最低的人来说是不可行的。
如何打包和交付 Jupyter Notebook 应用,使其尽可能接近“下载并双击安装程序”类型的设置?对于非技术人员来说,它需要很容易。新的 JupyterLab 在这里提供什么吗?我可以将它打包成一个 Electron 应用吗?
【问题讨论】:
nteract (nteract.io) 不能用于这些目的? nteract 将大量用于围绕 jupyter 构建集成。如果您可以将当前代码/ pkg 放入这些发行版中,那么可能比尝试从头开始创建一些东西更值得。 一种选择是使用conda package
创建一个包含整个环境的tarfile;然后可以使用conda install --offline <tarfile>
安装此 tar 文件。请注意,任何本地编译的库(例如,使用 Cython)都不能重定位,因此这仅在您使用纯 python + 预打包库时才有效。见this discussion。
【参考方案1】:
你试过conda constructor吗?
它会创建一个双击 + 跟随步骤安装程序,用于安装 python、conda 和指定的 conda 包。 以这种方式安装 Jupyter 还会在 Windows 中创建一个开始菜单条目以启动 Jupyter 服务器。 它还允许您指定安装前和安装后的批处理脚本,您可以将其用于额外配置。 它也可以创建 linux 和 osx 安装程序。为了分发和更新应用程序(.ipynb 文件),我曾经使用 Jupyter 服务器的启动脚本来检查 github 存储库中的较新版本,并拉取文件的新版本(如果有的话)。
另外,为了在 Jupyter 中获得更友好的用户体验,请查看appmode。
【讨论】:
是否可以添加一个开始菜单条目,将 Jupyter 启动到特定的笔记本中? 是的,conda用来安装开始菜单项的工具是menuinst。它使用一个 json 来指定单击时运行的命令。您可以修改此命令(并使其在目录或文件上打开 Jupyter)并使用 menuinst 的 python api 重新安装菜单项。所有这些都可以手动完成,也可以添加到构造函数的安装后脚本中。您甚至可以添加自己的菜单图标。 这似乎是目前最好的选择。理想情况下,像 jupyter notebook 上的独立 nteract 应用程序是最好的,但目前这似乎不可行。【参考方案2】:您也许可以使用 pyinstaller。如果你可以通过调用一个简单的 python 脚本来启动你的程序。
pip install pyinstaller
pyinstaller --onefile your_script.py
如果您在 windows 环境中执行此操作,则会创建一个包含所有依赖项的 windows exe 文件。我不确定在 linux 系统上会发生什么。 exe文件可能会变得非常大。
如果脚本需要任何临时文件等,您可能会遇到问题。我正在尝试自己解决这个问题。
【讨论】:
以上是关于创建/分发基于 Jupyter Notebook/JupyterLab 的独立应用程序的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章
如何基于Jupyter notebook搭建Spark集群开发环境
ubuntu 16.04安装jupyter notebook使用与进阶
我不能在 jupyter notebook 中使用基于 01,02,03... 的索引
Windows下基于Python3安装Ipython Notebook(即Jupyter)。python –m pip install XXX