【问题标题】:How to install a new Jupyter Kernel from script如何从脚本安装新的 Jupyter 内核
【发布时间】:2022-08-04 14:12:12
【问题描述】:

我正在尝试通过 bash 脚本在 jupyter 环境中安装新内核。

在使用 jupyter/minimal-notebook 作为父映像的 dockerfile 中,我运行了一个 bash 脚本:

  • 生成一个新的虚拟环境:python -m venv new_kernel
  • 安装 numpy 和 ipykernel new_kernel/bin/pip install ipykernel numpy
  • 注册内核:new_kernel/bin/python -m ipykernel install --name new_kernel --display-name \"Python (new_kernel)\"

不幸的是,结果我得到:

  • 内核中可用的新标​​签“Python (new_kernel)”,但如果我使用该内核,它没有安装 numpy
  • 调查 new_kernel/lib/python3.9/site-packages 文件夹,我发现 numpy 已安装。这让我觉得内核没有被以某种方式看到。

如何让新内核与安装的库一起工作?

  • 您是否也在创建新环境后采购它?从这里的流程来看,它可能会使用新 bin 中的 pip 来在现有环境中安装依赖项。
  • 你的意思是如果我做source new_kernel/bin/activate?我没有,因为我直接使用环境 pip (new_kernel/bin/pip) 将包安装在 new_kernel 中

标签: python linux jupyter-notebook jupyter jupyter-kernel


【解决方案1】:

我了解它是如何工作的,所以我回答自己,以帮助那些有同样问题的人。

TL;博士;

环境加载良好。粗暴地导入你的新内核库,你应该没有问题。

据我了解,cell bash 模拟器作用于与加载到笔记本中的 python 上下文不同且独立的上下文。所以最好使用sys.prefixlist(pkg_resources.working_set)来检查环境。

重现案例

python -m venv new_kernel
# a new new_kernel folder has been created, containing the environment

# install ipykernel and numpy in the new env
new_kernel/bin/pip install ipykernel numpy

# install the new kernel tied to the new env
new_kernel/bin/python -m ipykernel install --name new_kernel --display-name "Python (new_kernel)"

# launch jupyter lab
jupyter lab

从 jupyterlab GUI 你应该看到新内核在可用的内核中。单击它以打开一个已加载的新笔记本。

问题

让我们检查一下环境。

  • 如果您在新单元格中键入!which python,我们将获得通往新环境的不同路径。

  • 如果你输入!pip list,我们看不到numpy安装

  • 通过输入以下指令我们发现环境路径已经正确加载
import sys
print(sys.prefix)
# should see something like /home/jovyan/new_kernel

print(sys.path)

  • 如果您检查此笔记本中加载的包,您会发现麻木的安装!
import pkg_resources
list(pkg_resources.working_set)

怎么了?

我们刚刚看到,如果我们从单元格的 bash 模拟器 (!<command>) 运行命令,结果就是谎言;而如果我们检查工作内核的 python 上下文,我们会发现环境已正确加载。

不幸的是,到目前为止,我还没有找到关于这种现象的官方参考资料,我邀请任何人为这个问题做出贡献。 我个人的解释是 bash 模拟器访问启动 jupyter lab 的相同 CLI,它可以在任何路径中,并且可以在任何其他环境中打开/关闭;而 jupyter lab 启动的 notebook 实际上是从内核配置中加载上下文的。

因此它们作用于两个不同且独立的上下文,因此最好直接检查 python 上下文。

边注

有趣的是,如果你使用nb_conda_kernels,这个问题是不会重现的, 因为它使用自定义内核规范管理器.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2016-11-21
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    相关资源
    最近更新 更多