conda 和 jupyter 之间的关系可能令人困惑。将 conda 视为您的环境,将 jupyter 视为任何其他包。一个可以用来启动进程然后提供服务的包。
要回答您的问题,应将它们安装在您的 conda 环境中。不幸的是,它比这复杂一点。所有用户都可以使用这些扩展。我没有亲自测试过在不同环境中拥有更多扩展的单个用户(如果可能,但如果我这样做会更新答案)。
If it helps, this is what the docs have to say for the matter:
要安装 jupyter_contrib_nbextensions 笔记本扩展,需要三个步骤。首先,需要安装 Python pip 包。然后,需要将笔记本扩展本身复制到 Jupyter 数据目录。最后,可以使用内置的 Jupyter 命令启用已安装的笔记本扩展,或者更方便地使用作为此 repo 的依赖项安装的 jupyter_nbextensions_configurator 服务器扩展。
Assuming you installed the extensions via conda:
conda install -c conda-forge jupyter_contrib_nbextensions
然后使用--sys-prefix,这很好。来自文档:
--sys-prefix 安装到 python 的 sys.prefix,例如在虚拟环境中很有用,例如 conda。
所以,要添加一个扩展,过程应该是这样的:
$ sudo su -
$ pip install fileupload
$ jupyter nbextension install --sys-prefix --py fileupload
$ jupyter nbextension enable fileupload --py --sys-prefix
由于标题询问的是 conda 环境,所以我也将深入探讨一下。我已经在 Ubuntu 18.04LTS 上测试了这些方法。
您通常希望允许用户共享用户创建的环境,而永远无法访问 root 权限。您有两个我见过的不错的选择(如果您知道其他方法,请发表评论):1)共享环境 2)从需求文件中复制环境。不要忘记您还必须将环境添加为内核。
方法 1 - 共享环境
在共享位置创建环境,然后让两个用户将其添加为内核。
conda create -p /home/envs/test --clone root
可以克隆根来复制根环境,或基础环境的基础。 /home/envs/test 将在“envs”目录中创建一个“test”环境。确保 envs 对将使用这些文件的用户拥有所有必要的权限。
从那里作为另一个用户,只需将环境添加为内核。
$ sudo su - <user-to-install-kernel-to>
$ conda activate <test>
$ python -m ipykernel install --user --name test \
--display-name "Python (test)"
注意.. 我相信我必须手动更新 kernelspec 以使其指向正确的 python 环境?♂️
方法2
或者,只需创建环境的副本
$ conda env export --name test > environment.yml
$ sudo su - customer
$ conda env create --name cust-env-copy --file environment.yml
$ python -m ipykernel install --user --name cust-env-copy \
--display-name "Python (test)"