(数据科学学习手札81)conda+jupyter玩转数据科学环境搭建
费弗里 人气:0
> 本文示例yaml文件已上传至我的`Github`仓库[https://github.com/CNFeffery/DataScienceStudyNotes](https://github.com/CNFeffery/DataScienceStudyNotes)
# 1 简介
我们在使用`Python`进行数据分析时,很多时候都在解决环境搭建的问题,不同版本、依赖包等问题经常给数据科学工作流的搭建和运转带来各种各样令人头疼的问题,本文就将基于笔者自己摸索出的经验,以`geopandas`环境的搭建为例,教你使用`conda`+`jupyter`轻松搞定环境的搭建、管理与拓展。
图1
# 2 虚拟环境的搭建与使用
## 2.1 使用conda创建虚拟环境
以`Windows`操作系统为例,因为全程主要使用命令行,所以其他系统方法类似,有少许语句有差异的地方遇到问题时可以自行查找解决。首先我们要解决的是环境的创建,第一步需要安装`conda`服务,这里我们有`Anaconda`和`miniconda`两种方式,本文选择`miniconda`体积小巧,不会像`Anaconda`那样自带数量众多的科学计算相关包而显得臃肿。
有条件上外网的读者朋友可以在官网( https:/https://img.qb5200.com/download-x/docs.conda.io/en/latest/miniconda.html )下载与你的操作系统对应的安装包,也可以在**清华大学镜像站**-**获取下载链接**-**应用软件**-**Conda**( https://mirrors.tuna.tsinghua.edu.cn/ )中下载对应的最新的安装包:
图2
本文选择的是从官网下载的最新版本`4.8.2`,因为`miniconda`自带`Python`,之后所有新环境的创建我们都可以通过`conda`来实施,所以建议你在安装之前系统中不要保有其他`Python`环境。下载完成之后直接打开安装,一路可以按照默认的选项继续,到图3显示的步骤时为了方便之后的使用建议都勾选上:
图3
完成安装后我们进入控制台输入`conda --version`检查是否成功安装:
```
C:\Users\hp>conda --version
conda 4.8.2
```
输入`conda env list`查看当前存在的所有环境:
```
C:\Users\hp>conda env list
# conda environments:
#
base * C:\Conda
```
可以看到我们当前只有1个环境*base*,即`miniconda`自带的`Python`,因为图3中我们勾选了*Register Miniconda3 as the system Python 3.7*,所以在控制台中直接输入`python`可以得到下列结果:
```
C:\Users\hp>python
Python 3.7.6 (default, Jan 8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated. Libraries may fail to load. To activate this environment
please see https://conda.io/activation
Type "help", "copyright", "credits" or "license" for more information.
>>> quit() # 退出
C:\Users\hp>
```
控制台输入`conda list`可以看到当前仅有的*base*环境中仅有下列包:
```
C:\Users\hp>conda list
# packages in environment at C:\Conda:
#
# Name Version Build Channel
asn1crypto 1.3.0 py37_0 defaults
ca-certificates 2020.1.1 0 defaults
certifi 2019.11.28 py37_0 defaults
cffi 1.14.0 py37h7a1dbc1_0 defaults
chardet 3.0.4 py37_1003 defaults
conda 4.8.2 py37_0 defaults
conda-package-handling 1.6.0 py37h62dcd97_0 defaults
console_shortcut 0.1.1 4 defaults
cryptography 2.8 py37h7a1dbc1_0 defaults
idna 2.8 py37_0 defaults
menuinst 1.4.16 py37he774522_0 defaults
openssl 1.1.1d he774522_4 defaults
pip 20.0.2 py37_1 defaults
powershell_shortcut 0.0.1 3 defaults
pycosat 0.6.3 py37he774522_0 defaults
pycparser 2.19 py37_0 defaults
pyopenssl 19.1.0 py37_0 defaults
pysocks 1.7.1 py37_0 defaults
python 3.7.6 h60c2a47_2 defaults
pywin32 227 py37he774522_1 defaults
requests 2.22.0 py37_1 defaults
ruamel_yaml 0.15.87 py37he774522_0 defaults
setuptools 45.2.0 py37_0 defaults
six 1.14.0 py37_0 defaults
sqlite 3.31.1 he774522_0 defaults
tqdm 4.42.1 py_0 defaults
urllib3 1.25.8 py37_0 defaults
vc 14.1 h0510ff6_4 defaults
vs2015_runtime 14.16.27012 hf0eaf9b_1 defaults
wheel 0.34.2 py37_0 defaults
win_inet_pton 1.1.0 py37_0 defaults
wincertstore 0.2 py37_0 defaults
yaml 0.1.7 hc54c509_2 defaults
```
接下来我们开始来搭建本文用于举例说明的`geopandas`环境,使用`conda create -n 环境名称 python=版本`来创建新的环境,譬如这里我们创建名为`python_spatial`的虚拟环境,`Python`版本选择`3.7`:
```
C:\Users\hp>conda create -n python_spatial python=3.7
```
遇到`Proceed ([y]/n)?`输入y继续,等相关资源下载并安装配置完成后,再次查看当前存在的所有环境:
```
C:\Users\hp>conda env list
# conda environments:
#
base * C:\Conda
python_spatial C:\Conda\envs\python_spatial
```
可以看到与之前相比多了我们刚刚创建好的`python_spatial`环境,使用`conda activate 环境名称`来激活指定的环境:
```
C:\Users\hp>conda activate python_spatial
(python_spatial) C:\Users\hp>
```
可以发现这时命令行开头多了`(python_spatial)`,这代表我们已经进入激活的`python_spatial`环境中,接着我们就可以使用`conda`命令在当前环境中安装`geopandas`,按照官网的推荐方式从*conda-forge*对应的`channel`进行安装,执行`conda install --channel conda-forge geopandas`,遇到需要选择的地方一样地输入y,这里依赖包较多,需要等待较长时间,直到最后`done`出现表示安装成功,在控制台中直接进入`python`,检查`geopandas`是否正确安装:
```
(python_spatial) C:\Users\hp>python
Python 3.7.7 (default, Mar 23 2020, 23:19:08) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import geopandas as gpd
>>>
```
至此,我们已经完成了`geopandas`基础环境的搭建,接下来我们来配置使用`jupyter`。
## 2.2 配置jupyter lab
类似`conda`,`jupyter`也分为`jupyter notebook`和`jupyter lab`,两者核心功能都差不多,但`jupyter lab`拥有更多的拓展功能,并且界面和操作方式也更加炫酷方便,所以本文选择`jupyter lab`,在上一节中创建好的`python_spatial`环境下使用`conda install jupyterlab`安装基础部分,安装结束之后,在`python_spatial`环境下可以通过执行`jupyter lab`来打开它,在此之前需要先为`jupyter lab`配置虚拟环境,否则只能识别到默认的`base`环境。
- **安装ipykernel**
退出虚拟环境后执行`conda install ipykernel`。
- **为虚拟环境安装ipykernel**
执行`conda install -n python_spatial ipykernel`。
- **激活虚拟环境&将虚拟环境写入jupyter的kernel中**
```
C:\Users\hp>conda activate python_spatial
(python_spatial) C:\Users\hp>python -m ipykernel install --user --name python_spatial --display-name
"spatial"
Installed kernelspec python_spatial in C:\Users\hp\AppData\Roaming\jupyter\kernels\python_spatial
(python_spatial) C:\Users\hp>
```
这时我们在`jupyter lab`中已经可以切换到`python_spatial`环境了,接下来为了使用`jupyter lab`的插件拓展,需要安装`nodejs`,我们在`python_spatial`下执行`conda install nodejs`即可,完成安装之后根据自己对插件功能的需要可以分别安装不同的插件,下面举几个常用的例子:
- **html交互部件插件**
为了在`jupyter lab`中渲染一些html部件,譬如`tqdm`中的交互式进度条,在虚拟环境下执行下列命令:
```
pip install ipywidgets
jupyter labextension install @jupyter-widgets/jupyterlab-manager
```
完成后执行`jupyter lab`,在打开的操作界面中*notebook*下点击`python_spatial`创建新的notebook,执行如下命令(提前安装好`tqdm`),可以看到出现了**交互式**的进度条:
图4
- **目录插件**
在`ipynb`文件中可以用`markdown`编写各级别标题,在使用下列插件自动生成目录:
```
jupyter labextension install @jupyterlab/toc
```
图5
- **matplotlib交互式绘图**
使用`matplotlib`交互式绘图模式:
```
pip install ipympl
jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-matplotlib
```
安装完成后就可以使用`%matplotlib widget`开启交互式绘图模式(请提前安装好`geopandas`绘图依赖包`descartes`):
图6
你也可以在侧边栏中发现更多的实用插件:
图7
## 2.3 虚拟环境的备份和恢复
`conda`提供了将虚拟环境导出为`yaml`文件的功能,使得我们可以保留好不容易创建好的虚拟环境中的配置信息,格式如`conda env export > 导出路径\文件名.yml`,譬如我们导出前面创建好的`python_spatial`到所需路径下:
```
(python_spatial) C:\Users\hp>conda env export > C:\Users\hp\Desktop\python_spatial.yml
(python_spatial) C:\Users\hp>
```
之后你可以在安装好`conda`服务的其他机器上按照`conda env create -n 新环境名称 -f=路径\文件名.yml`,譬如我们就在本机上用已经导出的`python_spatial.yml`复制为新的虚拟环境,耐心等待之后`conda`会自动完成前面所有我们手动实现的步骤:
```
conda create -n new_python_spatial -f=C:\Users\hp\Desktop\python_spatial.yml
```
之后只需要像前文中一样执行`python -m ipykernel install --user --name new_python_spatial --display-name "new spatial"`从而为`jupyter lab`添加新的虚拟环境的*kernel*信息,在`new_python_spatial`环境下启动`jupyter lab`,这是我们可使用的环境变成了3个:
图8
## 2.4 虚拟环境的移除
使用`conda remove -n 环境名称 --all `来移除已经创建的环境,譬如我们使用`conda remove -n new_python_spatial -all`将`new_python_spatial`移除之后,再次查看所有环境:
```
C:\Users\hp>conda env list
# conda environments:
#
base * C:\Conda
python_spatial C:\Conda\envs\python_spatial
```
但这时会存在一个恼人的地方,我们这里只是移除了虚拟环境,但前面注册到`jupyter lab`中的*kernel*还会显示,但实际上是没有对应环境存在的,所以强行选择已经移除的环境对应的*kernel*会报错:
图9
控制台中使用`jupyter kernelspec list`查看信息:
```
C:\Users\hp>jupyter kernelspec list
Available kernels:
new_python_spatial C:\Users\hp\AppData\Roaming\jupyter\kernels\new_python_spatial
python_spatial C:\Users\hp\AppData\Roaming\jupyter\kernels\python_spatial
python3 C:\Conda\share\jupyter\kernels\python3
```
接着使用`jupyter kernelspec remove kernel名称`对其进行移除即可:
```
C:\Users\hp>jupyter kernelspec remove new_python_spatial
Kernel specs to remove:
new_python_spatial C:\Users\hp\AppData\Roaming\jupyter\kernels\new_python_spatial
Remove 1 kernel specs [y/N]: y
[RemoveKernelSpec] Removed C:\Users\hp\AppData\Roaming\jupyter\kernels\new_python_spatial
```
之后在启动`jupyter lab`就会发现残余的*kernel*跟着消失了。
以上就是本文的全部内容,对应的`yaml`文件已上传至文章开头的`Github`仓库中,你可以直接基于它创建对应本文`python_spatial`的虚拟环境。
加载全部内容