内容简介:学习虚拟环境配置时,您可能见过在 JupyterLab (或 Jupyter Notebook) 中切换不同 kernel 的做法,看着就很酷哈哈。那么,这样做有什么作用呢?能够更加方便地使用虚拟环境吗?要怎么做才能实现这个功能呢?本文将为您详细介绍。

本文的基础是会使用 conda 配置虚拟环境,欢迎阅读我的文章: 使用 conda 配置虚拟环境与管理安装包。

学了 Anaconda 虚拟环境配置之后,我看到有运行环境配置文件 (environment.yml) 的教程,就想安装虚拟环境试试。本来觉得自己掌握了 conda 配置虚拟环境的各种操作,没想到很快就遇到了新问题。 在“Hands-On Machine Learning with Scikit-Learn, Keras & TensorFLow, 2nd Edition, by Aurelien Geron(O’Reilly)” 这本书的配套代码中 (代码的GitHub地址),作者老师写了详细的安装指南,开始的步骤和 使用 conda 配置虚拟环境与管理安装包 一文中介绍的方法没什么不同,也是用 conda env create 把 .yml 的环境配置安装上,建立一个名为 “tf2” 的虚拟环境。然而,接下来要在 tf2 环境中,输入:

(tf2)python3 -m ipykernel install --user --name=python3

据说可以设定 Jupyter Notebook 的 kernel,打开 Jupyter 就是 tf2 的环境配置。这让我十分困惑,之前我在虚拟环境(比如这里的 “tf2”)中运行 JupyterLab,import packages 的版本号都对啊。为什么还要再安装 ipykernel 呢?而且,我在使用中突然发现,import packages 引用的库及其版本号还是基于 base 环境,这是怎么回事?

stackoverflow 的这篇问答 解答了我的问题。原来,有三种方法可以使用不同虚拟环境配置的 JupyterLab (或 Jupyter Notebook) 。下面结合 tf2 这个例子来说明。

方法一

就是上文提到、我以前用的方法。有三步:1.进入虚拟环境 2.安装 jupyterlab 3.在该虚拟环境中,运行 jupyterlab。

安装:

(base)conda activate tf2
(tf2)conda install jupyterlab

使用:

(tf2)jupyter lab

这个方法简单易行,但是有两个缺点:

1.每次都要先进入这个虚拟环境,再运行代码。

2.每个虚拟环境都要安装 jupyterlab (或 jupyter notebook),其实不同虚拟环境的 jupyter 之间只是运行 python 代码的 kernel 不同(kernel 可以理解为 jupyter 中运行代码所使用的 python 解释器),编辑器等框架部分都相同。

既然这样,可不可以都用 base 环境的框架 (jupyterlab),把里面的 kernel 换一下就好了,这就是方法二的思路。

方法二

该方法需要先在虚拟环境中安装 ipykernel 及关联到 Jupyter 中,之后在 base 环境打开 Jupyter ,也可以使用虚拟环境配置了。

安装:

(base)conda activate tf2
(tf2)conda install ipykernel
(tf2)ipython kernel install --user --name=tf2

注意:kernel 命名不一定要和虚拟环境名完全相同,比如这里也可以是:--name=tf2-kernel ,但最好还是和虚拟环境名相似或相关,要不然以后可能会想不起来哪个 kernel 对应的是哪个环境了。

使用:

可以在 base 环境打开 JupyterLab ,如下所示,

(base)jupyter lab

通过切换 kernel 即可在 JupyterLab 中使用 tf2 环境配置,而不必进入 tf2 环境中。具体操作为:打开 JupyterLab ,点击 kernel 项,如下图所示,在下拉框中可以看到不同的 kernels,选择当前环境对应的 kernel,比如这里的 “tf2”,即可切换到 tf2 环境。

这其实就挺方便了,在 base 环境中打开 JupyterLab 就可以切换多个环境的 kernel。

能不能进一步简化 kernel 配置?只要虚拟环境装了 ipykernel(可以在新建虚拟环境时安装),就自动配置 kernel,都不用进入虚拟环境中写 ipython kernel install --user --name=KernelName 。这就是方法三的思路。

方法三

安装:

在 base 环境中,输入:

(base) conda install nb_conda_kernels

就安装了一个自动化的工具,实现 ipython kernel install 的功能。以后,新建的虚拟环境中只要安装了 ipykernel,该环境的 Jupyter kernel 就会自动新建。

例如,新建一个名为 “test” 的虚拟环境,新建环境时安装 ipykernel,

(base) conda create -n test ipykernel

然后就不用管了,test 环境的 kernel 会自动生成,是不是很省事呢哈哈。

使用:

和方法二相同,在 base 环境打开 JupyterLab 即可,会看到 kernel 选项新增了 “Python [conda env: test-kernel]”,选择该 kernel ,Jupyter 就使用相应的虚拟环境配置。

如果使用 JupyterLab,在初始页面还会看到新生成的不同 kernels,如下图所示。如果要新建一个 Jupyter Notebook,点击某个 kernel,即可生成一个该虚拟环境配置的空白 .ipynb 文件。

看了上面这三种方法的介绍,你可能已经知道了问题一的答案。为什么要装 ipykernel?这就是方法一和方法二的区别。装了 ipykernel,可以在 base 环境打开 JupyterLab 就使用该虚拟环境配置,而无需每次进入该虚拟环境再打开 JupyterLab。两种方法的效果是相同的。

学习了 ipykernel 之后,可能又会有新的疑问:为什么使用方法一只有默认的 Python3 kernel,没有其它 kernel 可选,那我的环境配置会不会是 base 环境?

不会,我测试了一下,因为方法一是在该虚拟环境中打开 Jupyter,就是用的这个环境配置,你可以用:

import package-name
print(package-name.__version__)

查询一下安装 package 的版本,是该虚拟环境而不是 base 环境的版本。

回到问题二,import packages 的版本号还是用的 base 环境,这是怎么回事?
我分析,问题可能出在 python3 -m ipykernel install --user --name=python3 中的命名 --name=python3。安装指南中提到,这样可以把 tf2 的 kernel 设置为默认 kernel,每次打开不用切换 kernel。但是让 tf2 的 kernel 和 base 环境的 kernel 命名相同,结果 kernel 还是 base 环境配置。在 Anaconda Prompt 输入 jupyter kernelspec list 查看 Jupyter 的 kernels,显示只有一个 kernel: python3。用不同的命名,比如 python3 -m ipykernel install --user --name=tf2,就有了 tf2 环境配置的 kernel 。为什么 tf2 的 ipykernel 用 python3 命名,不会改变默认 Python3 kernel 的环境配置,这个问题我也还没弄懂,欢迎交流和指教,谢谢!

本文对您有帮助的话,请点赞支持一下吧,谢谢!

关注我 宁萌Julie,互相学习,多多交流呀!

参考文章:

配置 kernel 的三种方法:

1.https://stackoverflow.com/questions/58068818/how-to-use-jupyter-notebooks-in-a-conda-environment/58068850

2.https://blog.csdn.net/u014264373/article/details/119390267

JupyterLab 安装 ipykernel :

3.https://zhuanlan.zhihu.com/p/478628221

如何在 JupyterLab 中把 ipykernel 切换到不同的 conda 虚拟环境?相关推荐

  1. webbrowser控件 有数据 但页面空白_如何在Excel中实现可以切换不同数据系列的滚珠图?...

    ▲更多精彩内容,请点击上方Excel小铲子▲ 操作系统版本 Windows 10 64位 Excel版本 Microsoft Excel 2016 64位 案例文档下载 链接:https://pan. ...

  2. linux php 升级,如何在linux中升级和切换php版本

    如何在linux中升级和切换php版本 发布时间:2020-06-26 16:05:07 来源:亿速云 阅读:225 作者:Leah 如何在linux中升级和切换php版本?针对这个问题,这篇文章详细 ...

  3. dw如何制作图片自动切换效果_如何在Dreamweaver中制作图片切换的效果?

    展开全部 无标题文档 var s=function(){ var interv=2000; //切换32313133353236313431303231363533e4b893e5b19e313332 ...

  4. java jsch 切换用户_如何在java中使用Jsch切换到root用户执行命令?

    我正在尝试通过使用私钥建立的ssh连接执行一组命令.为此我在java中使用了JSCh和Session类. 以下是代码: java.util.Properties config = new java.u ...

  5. 如何在cmd中切换python版本总结

    如何在cmd中切换Python版本总结 前言 尝试一:更改系统变量 尝试二.更改解释器名称 前言 由于学习nao机器人编程参加比赛,因此安装了python2.7版本.而之前安装的都为python3.9 ...

  6. 管理 zabbix_Zabbix 2019 峰会丨看睿象云如何在 Zabbix 中玩转告警

    2019年11月29日-30日,为期两天的 Zabbix 大会中国站在北京盛大召开,本届 Zabbix 大会以"新视界,新技术,共建未来新监控!"为主题,为与会人员提供前沿的监控技 ...

  7. shell中竖线的作用_如何在 Linux 中安装、配置和使用 Fish Shell?

    每个 Linux 管理员都可能听到过 shell 这个词.你知道什么是 shell 吗? 你知道 shell 在 Linux 中的作用是什么吗? Linux 中有多少个 shell 可用? -- Ma ...

  8. mysql data ibdata1_database - 如何在MySQL中收缩/清除ibdata1文件

    database - 如何在MySQL中收缩/清除ibdata1文件 我在localhost中使用MySQL作为在R中执行统计的"查询工具",也就是说,每次运行R脚本时,我创建一个 ...

  9. 如何在Leangoo中,为企业创建项目

    Leangoo(中文名:领歌)是一款基于看板的项目协作工具. 我们可以使用 Leangoo 可视化地进行项目需求.任务.问题和文档的管理和协作,随时随地跟踪团队工作进展.Leangoo 工具的设计融入 ...

最新文章

  1. 怎么提高面试成功率?
  2. java中正则表达式要进行转义的字符。
  3. 意外收获字节跳动内部资料,Android岗
  4. round robin权重轮循算法实现
  5. 解决Tomcat下源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示
  6. .NET Core开发实战(第11课:文件配置提供程序)--学习笔记
  7. 在JUnit中测试预期的异常
  8. C++ 继承 | 对象切割、菱形继承、虚继承、对象组合
  9. android handler、looper、message、messageQueue、
  10. Git cherry-pick后再merge出现一个“奇怪”的现象
  11. php mysql长连接聊天室_PHP之探索MySQL 长连接、连接池
  12. Android中使用sax解析XML
  13. Qt 之 HTTP 请求下载(支持断点续传)
  14. Unity 贴花/喷漆功能的原理、Projector组件的原理与优化
  15. win11中wsa使用fiddler抓包(https)
  16. 【Python图形绘制】使用turtle库实现美国队长盾牌
  17. 《惢客创业日记》2019.09.02(周一) 把习惯变成闹钟
  18. ZCANPRO的.can文件解析
  19. 使用Xunit进行单元测试
  20. 【Security】密码加密

热门文章

  1. fps游戏通用内存自瞄算法的原理与C++实现
  2. 虚拟机配置windows7+office2010
  3. 让ie6,ie7,ie8支持 css3 的部分属性实现全兼容
  4. 如何提取出word里的图片
  5. php日历备忘记事本,一个比较不错的PHP日历类分享
  6. CSS 渐变色 (超好看)
  7. html表格自动变色,如何设置实现Excel单元格自动变色?动图演示更详细
  8. 外汇交易与实务--外汇交易基本原理
  9. 微型计算机是计算器吗,小型计算机和微型计算机是同一个吗?
  10. linux系统路由器地址查询,如何在任何平台上查找路由器的IP地址