适用于不同环境的不同JupyterLab工作目录

时间:2020-09-27 15:18:57

标签: python anaconda jupyter jupyter-lab

我想以最佳实践方式从事多个项目。因此,我创建了不同的conda环境。对于我的第一个项目,我有一个专用目录,我将其定义为Jupyter工作目录,如所述here。 现在,在启动Anaconda和JupyterLab之后,由于我是从正确的目录开始的,所以我可以快速启动,并且从JupyterLab工作区打开了我所有的最后一个选项卡。所以到目前为止一切似乎都很好。

但是现在我想在第二个conda环境中启动第二个项目。我没有为该特定的conda环境定义工作目录和JupyterLab工作区。上面超链接中的解决方案似乎是全局设置,适用于所有conda环境。还有工作空间,我的意思是所有从上一届会议中打开的选项卡似乎都是全局的。我不想在同一工作目录中混合来自不同项目的代码。

到目前为止,我已经使用ipykernel something和nb_conda_kernels this approach进行了尝试。但是由于我对Anaconda / Jupyter甚至Python都不熟悉,所以我没有设法使其像我想要的那样与这些方法一起使用。我开始怀疑,是我遗漏了一些细节,还是在JupyterLab中处理不同项目的最佳实践与我到目前为止或想要做的事情完全不同。

那么,如何为不同的conda环境定义一个不同的工作目录,以及一个理想的Jupyter工作区? 还是在Anaconda / JupyterLab中进行不同项目时的最佳做法是什么样的?

1 个答案:

答案 0 :(得分:0)

Jupyterlab可以作为pip软件包安装在任何虚拟环境中。因此,在不同的环境中可能有多个Jupyterlab实例,并认为它们应该是完全独立的。最初,这是我的误解,并且在此答案的第一个版本中就已假定。

但是,我得出的结论是Jupyterlab更像是一个IDE,而不是一个软件包。例如,与PyCharm类似,应该在环境之间共享一个全局安装的Jupyterlab。就像PyCharm一样,可以将Python解释器更改为虚拟环境,在J​​upyterlab中,我们可以更改内核。

因此,要确保的第一件事是为虚拟环境使用正确的内核。可以在菜单中更改内核,并且笔记本会记住上一个内核,因此这应该不是问题。要添加新内核,应遵循IPython documentation:激活环境,确保已安装ipykernel并发出命令

python -m ipykernel install --user --name <env_name> --display-name "<name in Jupyterlab UI>"

另外,可以使用更改默认内核的命令行参数启动Jupyterlab,以便环境内核是启动器菜单中的第一个:

jupyter lab --MultiKernelManager.default_kernel_name=<env_name>

关于工作目录,可能需要从不太方便的所需位置启动Jupyterlab。不幸的是,生成jupyter_notebook_config.py并设置工作目录没有选项,因为该配置是全局的。前进的方法是Steven Silvester在此github issue中建议的命令行参数:

在以jupyter lab --NotebookApp.notebook_dir=<directory_name>启动或使用Jupyter配置启动时,可以设置工作目录。

对于工作区,允许使用系统环境变量来更改默认位置。这是documentation

默认情况下,位置为~/.jupyter/lab/workspaces/,其中~是用户的主目录。该文件夹不在JupyterLab应用程序目录中,因为这些文件通常在Python环境之间共享。可以使用JUPYTERLAB_WORKSPACES_DIR环境变量来修改位置。

设置目录有一个类似的环境变量:

用户设置目录包含Jupyter扩展的用户级别设置。默认情况下,位置是~/.jupyter/lab/user-settings/,其中~是用户的主目录。该文件夹不在JupyterLab应用程序目录中,因为这些设置通常在Python环境之间共享。可以使用JUPYTERLAB_SETTINGS_DIR环境变量来修改位置。

共享设置是一个合理的假设,如果工作区需要无缝的单独环境配置,则不是这样。

所以最后,人们希望在他们的环境中拥有这样的东西:

alias jl="jupyter lab --NotebookApp.notebook_dir=<working_directory> --MultiKernelManager.default_kernel_name=<env_name>"
export JUPYTERLAB_WORKSPACES_DIR=<workspaces directory>

要使其成为问题的解决方案,必须将其自动化,以便在启动环境时执行上述命令,并且仅影响该环境。 我使用一个未发布的DIY环境管理解决方案,该解决方案由多个Shell脚本组成,并为我自动化。