曾几何时我有幻想 Apple 如果有一天也能出一款像 Duet Display 那样的应用,可以让我的 iPad 不在吃灰,结果在 macOS 10.15 Catalina 上推出了「随航」功能,让把 iPad 作为第二屏的人们连连称赞。

我也幻想是否有这么一款编辑器,既小巧精致开箱即用,又能写Markdown、又能运行代码,还有能和其他 IDE 媲美的功能……直到我遇见了它——Visual Studio Code(本文简称 VS Code ) ,一款来自于微软大厂出品的编辑器。

VS Code 概述

含着「金汤匙」横空出世地 VS Code 自发布以来每年使用率都在有所上涨。这款编辑器的受欢迎程度达到一个怎样的地步呢?

在 Stack Overflow 社区 2019 年的开发者调查1 里「Technology」部分「Development Environments and Tools」里「Most Popular Development Environments」这一小节中,VS Code 除了在移动开发环境上位居第二外,无论是在 Web 开发还是在 DevOps 上使用率都占据榜首!并且在全样本领先了微软自家 Visual Studio一大截!

最可怕的是,在调查结果中,VS Code的使用率都超过了50%。于是官方给出了这么一句作为结论总结:

Visual Studio Code is a dominant player among developer environment tools this year.

虽然说 Stack OverFlow 社区并不能代表所有开发技术人员,但是从这个侧面反映出了 VS Code 用户对其满意度如何。话又说回来,VS Code 对于程序员来说或许是个好用的利器,可是对于数据科学领域的使用者来说,体验并不友好。

不过好消息是,随着最近 VS Code 版本的更新,你现在终于可以在 VS Code 上体验到原生的 Jupyter Notebook 了!不了解 Jupyter Notebook 的朋友可以翻阅我之前写过的一篇文章。

👉关联阅读: 在线的 Jupyter Notebook 云环境

为行文方便本文以 Web Jupyter 和 Jupyter 来分别代称原生浏览器的 Jupyter Notebook 和 VS Code 中的 Jupyter Notebook 。

为什么我要强调「原生」二字?

因为在此之前,无论你是用 PycharmSpyder 还是以前版本的 VS Code,如果想要运行 Web Jupyter 式的交互环境,你就必须要在代码开头像添加装饰器(Python 中的一种特殊函数)一样,加上#%%这一顶帽子,才会在.py文件里调用交互式环境。

同时,原生的.ipynb格式文件无法被直接预览,让人十分头疼。

如果你使用的是 macOS,又想用 Quick Look 的预览.ipynb文件的话,你可以参考 huhuhang 的这篇文章。

👉关联阅读:在 Mac 中快速预览 Jupyter Notebook 文件

倘若你用的是 Windows,那么想要预览要么查看已经是导出好的 .html 文件,要么就是老老实实打开 Web Jupyter 查看。

但是现在不需要打开Web Jupyter,在最新版本(1.39.x)的 VS Code 里你就能预览.ipynb文件,甚至还可以直接在交互环境里开始写代码了!

VS Code 功能速览

在阅读这部分内容时,不了解 VS Code 的读者可以参考一下 SpencerWoo 的这篇文章,里面有详尽的介绍,我这里只做简要概述。

👉关联阅读:免费好用的全平台 Markdown 编辑器,你可以自己「做」一个

这款编辑器就算是你是 Atom 或者 Sublime Text 的使用者都能很好地上手。如果你之前使用过 Sublime Text,在 VS Code 里你也可以能够快速、便捷地使用⌘+Shift+P(Windows 上使用Ctrl+Shift+P)来呼出命令面板,进行命令调用;同时关于整个编辑器的配置文件,你也可以像 Atom 那样通过改写.json文件来实现。

VS Code 也有着丰富的调试功能,支持常用的断点调试和其他调试方法,让你 debug 自己的代码简单快捷。

但是作为一款编辑器,本体的 VS Code 仍有许多功能上的缺失。所以依靠插件就十分必要了。插件市场(Extensions Maketplace)拥有丰富的插件,你可以下载别人发布好的插件来助力你的 VS Code。不仅可以用来写代码,你也可以用来写 Markdown(本文就是在当中完成)。

同时,自从微软收购了 Github 之后,也将 Git 的功能集成到 VS Code 中。所以现在我每次使用 VS Code 的基本流程就是将项目文件夹添加到工作区,在当中修改之后进入到 Github 的管理面板进行提交,之后呼出命令版输入git push即可推送到默认的仓库中。再也不用打开 Git Bash 了。

以上的列举并不完全,有兴趣的朋友可以自行探索体验。

VS Code 中 Jupyter 的体验

数据操作方面

如果你是用来做数据分析或者科学计算,那么其实并没有什么兼容性问题。并且 VS Code 还提供了变量观察面板,方便你查看当前环境中存在的变量有哪些,这是 Web Jupyter 所不具备的。

若是你想要在 Web Jupyter 里拥有变量面板地功能,那么可以推荐你下载 Github 上这个Jupyter 插件

除此之外,像 Pandas 库的DataFrame类型或 Numpy 库的ndarray类型数据都能够被很好地展示。输出的结果字体样式和 VS Code 一致,看起来更加美观。

可视化方面体验

在使用Seaborn库或者matplotlib库中并没有发现什么问题,使用体验和 Web Jupyter 并无二致。

同时,像Bokeh或是plotly_express这样的第三方可视化交互库都能完美支持。

如果你打算像在 Web Jupyter 那样直接在 Jupyter 里使用 Pyecharts,虽然运行成功,但是不会渲染出任何图形。

经过向 Pycharts 库的作者咨询并参考官方文档后,摸索出了解决方案:

  1. 首先需要在 Cell 开头声明 Notebook 类型为 JUPYTER_LAB(从这里可以看出 VS Code 里的  Jupyter 可能是以 Jupyter Lab 进行开发)
  2. 之后调用一次load_javascript()加载 JavaScript 渲染。
  3. 渲染一次后,只要不是关闭.ipynb文件重新进入到交互环境中,那之后的图形只要运行render_notebook()即可生成相应的渲染图形

注:其中第二步和第三步的命令需要分开运行,不能放在一个 Cell 中,否则无效。

实例代码如下:

#%% from pyecharts.globals import CurrentConfig, NotebookType CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB from pyecharts.charts import Bar bar = Bar() bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]) bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90]) bar.load_javascript() #加载JavaScript渲染 #%% bar.render_notebook()


最终呈现效果如下:

缺点与不足

虽然在实际使用中 VS Code 好像已经能拥有和 Web Jupyter 一样的体验了,但是这仅仅只是过了「及格线」,还不能算「优等生」。

Jupyter Notebook 的一些功能仍无法使用

在 Web Jupyter 中,你不仅可以将.ipynb文件导出成 .html.tex.pdf 甚至是幻灯片。而在 Jupyter 中,目前除了可以转化成.py文件以外其他格式均不支持;转化成的.py格式其实也就是将原来的那顶「帽子」给戴上。

我对 LaTex 格式没有太多需求,但是.html.pdf 格式才是方便将你的成果向别人展示一个比较好的方式。可惜这两种在 VS Code 里的 Jupyter 目前都不支持。

同时,像一些原生的快捷键也不支持,比如从鼠标光标所在之处使用 ⌃⇧Minus(Windows使用 Ctrl+Shift+-)将一个 Cell 分裂成两个独立的 Cell 等。所以支持的快捷键并不算多。

原生 Jupyter NoteBook 分裂效果

糟糕的命令补全体验

在命令补全上,让我拥有良好补全体验的,Pycharm 是一个,另一个就是 Web Jupyter。

相对与 Web Jupyter 来说,在 Jupyter 中,命令补全仍然是件很难受的事情:用Tab键来补全时灵时不灵,并且有时候即使弹出命令提示,你仍然无法用回车将其补全,需要自己输入完整。(可能是个 BUG)

而在 Web Jupyter 界面中你不仅仅能够用Tab来尽可能地补全命令,同时你还可以使用Shift+Tab的组合调出函数的参考文档。

原生 Jupyter Notebook 界面

结尾

编辑器之争是老生常谈的话题,但即使 VS Code 再怎么好用,可能也很难撼动 Vim 在一些程序员心中的地位;喜欢 Sublime Text 的朋友仍旧会使用 Sublime Text。同时,作为公认好用的 Python IDE——Pycharm 在大型项目上有着更强大的功能、更极致的性能,而这又是 VS Code 无法企及的。

但是 VS Code 胜在它小巧、灵动。如果平时是自己写小项目或是脚本,我肯定是用 VS Code 或是 Web Jupyter,而不是打开 Pycharm。

尽管 VS Code 目前对原生 Jupyter Notebook 的支持并不完善,对新手而言也有一定的使用难度;但是如果你是个熟练的「老鸟」或者是个已经熟悉了 Web Jupyter 的人,相信我上面所列的不足可能不会对你造成什么太大影响。

当你使用 VS Code 时,你就能体验到在一个有着文件管理功能、又能写.py又能写.ipynb的开发环境中无缝衔接是多么地爽!

文中代码来自官方文档例子,略有修改。

题图 Icon 来自于官方网站、Iconfont