电脑上的Python同时安装了3.6和3.7版本。然后我希望在Python3.7所使用的jupyter notebook中使用python3.6的内核(因为TensorFlow还没有对Python 3.7的支持)。所以大概就有了这篇博客。

直观地查找(方法一)

无论何时,要了解一个命令最简单的方式当然是查看帮助文档。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
C:\Users\ciaran>jupyter --help
usage: jupyter [-h] [--version] [--config-dir] [--data-dir] [--runtime-dir]
[--paths] [--json]
[subcommand]

Jupyter: Interactive Computing

positional arguments:
subcommand the subcommand to launch

optional arguments:
-h, --help show this help message and exit
--version show the jupyter command's version and exit
--config-dir show Jupyter config dir
--data-dir show Jupyter data dir
--runtime-dir show Jupyter runtime dir
--paths show all Jupyter paths. Add --json for machine-readable
format.
--json output paths as machine-readable json

Available subcommands: bundlerextension console kernel kernelspec migrate
nbconvert nbextension notebook qtconsole run serverextension troubleshoot
trust

从中大概可以看到,在jupyter的子命令中,与kernel有关的只有:kernelkernelspec。而kernel是用于Run a kernel locally in a subprocess的子命令。

所以我们就能看到jupyter的kernelspec的的用处,这正是我们所需要调整的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
C:\Users\ciaran>jupyter kernelspec --help
Manage Jupyter kernel specifications.

Subcommands
-----------

Subcommands are launched as `jupyter kernelspec cmd [args]`. For information on
using subcommand 'cmd', do: `jupyter kernelspec cmd -h`.

list
List installed kernel specifications.
install
Install a kernel specification directory.
uninstall
Alias for remove
remove
Remove one or more Jupyter kernelspecs by name.
install-self
[DEPRECATED] Install the IPython kernel spec directory for this Python.

To see all available configurables, use `--help-all`

首先查看jupyter中kernel的设置的位置:

1
2
3
C:\Users\ciaran>jupyter kernelspec list
Available kernels:
python3 d:\python37\share\jupyter\kernels\python3

修改配置文件

然后用文件管理器打开这个文件夹d:\python37\share\jupyter\kernels,这个文件夹中只有一个文件夹也就是python3,那么想必这就是一个kernel specification directory了。

看一看里面的结构,发现只有一个json文件kernel.json和两个Python的图标:

1
2
3
4
5
6
7
8
9
10
11
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python 3",
"language": "python"
}

复制一份重新命名,并修改这个kernel.json

把它改为python3.6版本:(argv中的命令是因为我已经将python3.6的可执行文件重命名为python36且将相应的目录添加到Path中了,如果没有这么做,那么在这一栏还需要完整填写python3.6的路径)

1
2
3
4
5
6
7
8
9
10
11
{
"argv": [
"python36",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python 3.6",
"language": "python"
}

但是这样做了之后我们还不能得到在kernelspec中的结果。我们还需要在kernelspec中安装它。

1
2
C:\Users\ciaran\Desktop\mlLearning>jupyter kernelspec install D:\Python37\share\jupyter\kernels\python36
[InstallKernelSpec] Installed kernelspec python36 in C:\ProgramData\jupyter\kernels\python36

这个时候我们就可以在jupyter notebook的图形界面上看到出现了一个喜闻乐见的Python3.6

jupyter new kernel

但是现在这个kernel是不能用的,因为我们还没有在python3.6上安装ipython kernel。

1
python36 -m pip install ipykernel

此时我们就能在jupyter中正常使用python 3.6的内核了。

正常的方式(方法二)

除了应该查帮助文档,查官方文档也是一个很应该的做法。

官方文档的方式比上面那一套意义不明的操作简单得多。前置条件是安装ipykernel

1
python36 -m pip install ipykernel

然后直接通过这条命令:

1
python36 -m ipykernel install --user --name myenv --display-name "Python (myenv)"

结果是看到它在系统的目录中多了一个kernel。

1
2
3
4
5
C:\Users\ciaran>jupyter kernelspec list
Available kernels:
myenv C:\Users\ciaran\AppData\Roaming\jupyter\kernels\myenv
python3 d:\python37\share\jupyter\kernels\python3
python36 d:\python37\share\jupyter\kernels\python36

可以看到的是在系统的这个目录中生成的json文件与我们之前修改的文件几乎一模一样,而且也能在图形界面中使用它了。

使用虚拟环境的python作为jupyter kernel的方式也跟这个过程类似,包括使用Anaconda的环境也是如此