推荐初学者使用Anaconda
- Q: 什么是Anaconda?
- A: wiki上对Anaconda的解释如下图所示

简单说,Anaconda可以给你提供一个用python做数据分析、机器学习等任务的环境,它使用Conda这个包管理系统来管理包(packages)和环境(environments)
Conda包管理系统
Conda是一个开源包管理系统和环境管理系统,可用于安装多个版本的软件包及其依赖关系,并能在它们之间切换。
-
Conda包含在Anaconda和Miniconda之中,Miniconda,见名知意,它是一个小的引导版本,只包含conda,Python和它的依赖包,初学者推荐使用Anaconda。
-
Anaconda包括conda,Python和超过150个自动安装的数据科学包及其依赖项
- Q:刚才提到,conda可以管理多个环境,那为什么需要多个环境?
- A:通常有这么几种情况,多个环境可以派上用场。
- 当你需要在电脑上装不同版本的Python;
- 你与他人合作一个项目,要确保所有人所用的包版本都一致,这种时候很适合使用conda来管理环境(一个人使用conda导出一个文件,里面列出了所有的包及对应的版本,其他人可以使用此文件在自己机器上新建一个完全一样的环境)
至此,我们已经下载了Anaconda,默认的base环境(下图中红框区域)已经能用来写python代码做些数据分析任务,你可以使用图形用户界面或者终端(Terminal) 来打开Jupyter Lab/Jupyter notebook(下图中粉色框区域)。但本文旨在介绍相关知识,在写代码之前,我们先来熟悉一些conda常用的命令:

Conda常用命令及环境管理
以下指令都需要在终端Terminal中执行
# 查看当前系统下的环境,在创建新环境之前,一般只有base环境,即刚开始的默认环境,*星号标识的是当前激活的环境
conda info -e
or
conda env list
# 创建新环境(environment,后文都使用env来代替)
# 比如创建一个名为demo的环境,指定python版本3.7
# (必须至少指定python版本或者一个要安装的包)
# []方括号内表示可选,例如你可以在创建这个conda env的时候,
# 一并安装pip和numpy这两个python包
conda create -n demo python=3.6 [pip numpy]
# 如果想安装anaconda默认提供的所有包, 后面跟anaconda
conda create -n demo python=3.6 anaconda
# 新建了一个demo环境之后,我们可以切换到demo env之下,此时你的
conda activate demo
# 在当前环境下安装所需的包,conda install会把依赖也安装,例如在demo env中安装pandas包
conda install pandas
# 有些包在conda中没有,需要使用pip安装, pip install可选的包相对要丰富的多,但个人推荐,首选conda install
pip install pandas
# 查看所在env下已安装的包
conda list
# 退出环境,会退回到base env下
conda deactivate
# 删除环境(如果你不再需要这个环境了)
conda env remove -n demo
or
conda remove -n demo --all
# 如果一些包下载过慢,可以添加清华大学的TUNA镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
下图展示了多个env的概念,本机中,除了默认就有的base env,还有另外两个新建的env

Jupyter Lab(Notebook)环境
现在可以正式启动写代码的工具了,这里我推荐使用Jupyter Lab,jupyter lab是jupyter notebook的下一代产品,集成了更多功能, 可以参考这篇知乎文章
jupyter lab的基本界面是这样的(图片来自官网)

如何启动jupyter lab呢?这里以Terminal中使用命令为例
# 在某个env下,敲入jupyter lab,浏览器会自动打开上图的界面
jupyter lab
# 如果在某个conda env中启动 jupyter lab
# 遇到如下问题,说明你的env中还没有安装jupyter
-bash: jupyter: command not found
conda install jupyterlab
在jupyter lab中工作,熟悉一些常用的快捷键,可以帮你事半功倍:
# 切换command mode 和 edit mode
# jupyter lab的代码块(cell)有两种模式,分别是edit mode 和 markdown mode
# 在edit mode下可以写代码,并执行
# 在markdown mode下可以写各种markdown文本,这部分不执行
ESC, Enter
# 插入一个新cell
a # above
b # below
# 删除一个cell
dd (连续敲两个d键)
# 撤销 undo
z
# 复制黏贴 copy paste
c # 复制一个cell
v # 黏贴一个cell
# 运行一个cell
Shift+Enter/ control+Enter(依然位于当前cell)
# Markdown mode
ESC -> m
# Markdown mode to command mode
y
# interrupt the running cell *号表示该cell正在运行
# 例如下列代码会无限循环,使用两个i键可以终止该cell执行
import time
while True:
print('Hello World')
time.sleep(2)
ii,interrupt the running
(重点) conda env作为 jupyter kernel
当你打开Jupyter Lab, 选择/切换kernel时, 发现只有默认的Python 3 kernel, 没有我们自己建立的env。 解决办法——需要将我们自己建的conda env设置为kernel,然后才能从Notebook / Lab中选择它。
首先看一下我系统中目前有几个conda env,如下所示,可看到除了base外,还有三个自己建的,接下来我以demo为例,将demo env设置为kernel, 并取名为 python36(demo), 最终就可以在jupyter lab中选择python36(demo)这个kernel了
(base) hezhonghuadeMacBook-Pro:~ hzh$ conda env list
# conda environments:
#
base * /Users/hzh/opt/anaconda3
demo /Users/hzh/opt/anaconda3/envs/demo
sibd /Users/hzh/opt/anaconda3/envs/sibd
test /Users/hzh/opt/anaconda3/envs/test
在设置之前,看一下本机共有几个kernel,如下,可知目前只有一个python3 kernel,这也是为何此时你打开jupyter lab只有python3 kernel一个选项的原因
(base) hezhonghuadeMacBook-Pro:~ hzh$ jupyter kernelspec list
Available kernels:
python3 /Users/hzh/opt/anaconda3/share/jupyter/kernels/python3
下面解释如何设置demo env为新的kernel,一共5步
- 进入demo env,当提示符从base变为demo时,表示已经进入了demo env下
- 随后安装ipykernel,这里我们使用conda install jupyterlab, 因为安装jupyterlab的时候,会顺带安装ipykernel
- 接下来是最重要的一步,将此env设置为kernel,同时给该kernel取名字(在jupyter lab中跟其他kernel区分),随后再查看本机的所有kernel,发现多出了刚才新设置的Python36(demo),
- 退出demo env
- 从base下启动jupyter lab,此时可以在kernel选项中看到新建的Python36(demo)
代码如下:
(base) hezhonghuadeMacBook-Pro:~ hzh$ conda activate demo
(demo) hezhonghuadeMacBook-Pro:~ hzh$ conda install jupyterlab
(demo) hezhonghuadeMacBook-Pro:~ hzh$ python -m ipykernel install --user --name demo --display-name "Python36(demo)"
Installed kernelspec demo in /Users/hzh/Library/Jupyter/kernels/demo
(demo) hezhonghuadeMacBook-Pro:~ hzh$ jupyter kernelspec list
Available kernels:
demo /Users/hzh/Library/Jupyter/kernels/demo
python3 /Users/hzh/opt/anaconda3/envs/demo/share/jupyter/kernels/python3
(demo) hezhonghuadeMacBook-Pro:~ hzh$ conda deactivate
(base) hezhonghuadeMacBook-Pro:~ hzh$ jupyter lab
为了方便大家理解,我把整个过程制作为下图,可以看到,整个过程最重要的是中间的5步

(Optional) Jupyter Lab 扩展插件
为了增强功能,可以使用一些插件,这里只介绍目录TOC(Table of Content)插件,很实用
在打开的jupyter lab界面中,点击菜单栏[Settings],选择[Enable Extension Manager],如下图红色部分,然后在左边的搜索框中输入要安装的插件,这里以TOC为例,搜索框下方会显示相关的插件,点击[install]安装

如果遇到如下错误,根据错误提示可知是缺乏nodejs导致

解决办法:
# 在terminal中安装nodejs
conda install nodejs
至此,用python做数据分析的环境已经准备好了,希望大家在数据科学之路上坚持努力!
参考
-
[Jupyter Lab Tutorial - Fully Interactive! ] www.youtube.com/watch?v=7wf…
-
[Customizing JupyterLab using extensions | PyData Austin 2019] www.youtube.com/watch?v=PT9…
-
[jupyter tools to increase productivity] towardsdatascience.com/jupyter-too…
-
[conda environment as jupyter kernel] medium.com/towards-art…
-
[知乎文章-jupyter lab新特性] zhuanlan.zhihu.com/p/38612108
-
[Building identical conda environments] docs.conda.io/projects/co…