专注于做有价值的技术原创

0%

jupyter_notebook_kernel_c_cpp

如果你想在jupyter notebook中交互式编写C以及C++,那么本文是为你而写^_^


1. 准备工作

为了减少安装过程中不必要的烦恼,影响你美美的心情,请确保目标机器上已经安装了Anaconda,下载地址:https://www.anaconda.com/distribution/#download-section。如已安装,请跳过。

2. 安装环境

以下列举环境是经过实践检验的环境,仅供参考,并非要求严格一致。

2.1 Linux

  • CentOS Linux release 7.4.1708 (Core)
  • Anaconda3
  • conda 4.6.11

2.2 macOS

  • macOS Mojave 10.14.4
  • Anaconda3
  • conda 4.6.14

注:windows目前还未得到较好支持

3. 开始安装

C语言和C++由不同kernel支持,两者没有依赖关系,因此可以根据需要只安装其中一个,或两个都安装,但推荐安装C++ kernel,这是主流的kernel,由更加专业的团队维护的项目,C kernel是由个人开发者维护的小型项目,实现较为简单,但如果想快速体验在jupyter notebook运行C,也是不错的选择。如果想了解更多jupyter支持的kernel,可以参考https://github.com/jupyter/jupyter/wiki/Jupyter-kernels

3.1 安装C++ kernel (xeus-cling)


  • 创建新的虚拟环境,命名为cling,或者你喜欢的其他名称,比如,如果你想在此环境安装C++和C Kernel,可以取名为c_cpp
1
conda create -n cling
  • 切换到新创建的虚拟环境
1
conda activate cling
  • 给新环境安装jupyternotebook
1
conda install jupyter notebook
  • 使用conda-forge镜像channel安装xeus-cling
1
conda install xeus-cling -c conda-forge
  • 检查是否成功安装了kernel
1
jupyter kernelspec list

正确安装,会显示以下四个kernel:

python3 /anaconda3/envs/cling/share/jupyter/kernels/python3

xcpp11 /anaconda3/envs/cling/share/jupyter/kernels/xcpp11

xcpp14 /anaconda3/envs/cling/share/jupyter/kernels/xcpp14

xcpp17 /anaconda3/envs/cling/share/jupyter/kernels/xcpp17

  • 打开notebook
1
jupyter notebook

在新建下拉菜单里可以看到看到上面的四个kernel,选择C++ 11:

将以下c++代码复制黏贴到cell中,按下shift+enter,运行C++代码,enjoy it!:

1
2
3
#include <iostream>

std::cout << "Hello world!" << std::endl;

补充:快捷安装

如果你不想一步步看完,或者你和我一样是个急性子的人,想一步到位,那么可以使用以下方法,一步搞定:

  • 新建文件,命名为cling.yml, 将以下内容复制黏贴到cling.yml中:
1
2
3
4
5
6
7
8
9
10
11
12
13
name: cling
channels:
- conda-forge
- https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
- defaults
dependencies:
- python=3
- pip=19.2.1
- jupyter
- notebook
- xeus-cling=0.7.1
  • 通过yml文件创建虚拟环境
1
conda env create -f cling.yml

没错只需两步,你已经完成和前面等效的环境创建,此方法推荐用于二次安装相同环境,本质是导出了上述环境,如果是首次安装,建议尝试一步步来的安装方式,更能加深对kernel工作机制的理解,以便以后安装其他语言的kernel。

3.2 安装C kernel (jupyter-c-kernel)

目前官方列举的第三方提供的C kernel,支持的比较好的是jupyter-c-kernel,在没有更好的C kernel出来前,这是一个不错选择。如果你熟悉了C++ Kernel的安装,那么安装jupyter-c-kernel也是大同小异,因此就不一一列举步骤,而是将所有安装命令汇总在一起:

3.2.1 创建新的虚拟环境安装

如果你想单独在一个新的环境安装C kernel, 可以使用如下命令(可将全部复制到一个shell脚本中,在命令行运行, 或一行行运行):

1
2
3
4
5
6
7
conda create -n clang
conda activate clang
conda install jupyter notebook
pip install jupyter-c-kernel
install_c_kernel
jupyter kernelspec list
jupyter notebook

3.2.2 在已有的虚拟环境安装

如果你不想重复安装jupyter, 可以在前面的环境里(clingc_cpp),直接使用pip安装jupyter-c-kernel:

1
pip install jupyter-c-kernel

需要注意的是,不同于xeus-cling在使用conda安装后,就可以通过命令jupyter kernelspec list查看到,使用pip安装jupyter-c-kernel后,会在当前环境可执行程序路径生成一个可运行命令install_c_kernel,需要再单独运行此命令install_c_kernel, 当然一般都已自动添加到环境变量里,因此可以直接运行。(细心的同学,应该注意到在上一小节也运行了这个命令)

1
2
3
install_c_kernel
# 查看已安装kernel
jupyter kernelspec list

再次打开jupyter notebook, 如下:

选择C,新建notebook, 将以下C代码复制到cell:

1
2
3
4
5
6
#include <stdio.h>

int main () {
printf("Hello world!\n");
return 0;
}

运行C代码, enjoy it!:

汇总

如果你想像3.1中使用‘yml’文件一次安装两个kernel,只要在3.1的文件上基础稍加改动,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
name: c_cpp
channels:
- conda-forge
- https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
- defaults
dependencies:
- python=3
- pip=19.2.1
- jupyter
- notebook
- xeus-cling=0.7.1
- pip:
- jupyter-c-kernel==1.2.2

复制黏贴到文件c_cpp.yml, 并在c_cpp.yml相同目录下运行如下命令:

1
2
3
4
conda env create -f c_cpp.yml
conda activate c_cpp
install_c_kernel
jupyter kernelspec list

参考

  • [1] Jupyter-kernels jupyter Github
  • [2] xeus-cling QuantStack Github
  • [3] jupyter-c-kernel brendan-rius Github
青笔 wechat
我是一条小青蛇 我有很多小秘密