conda 和 JupyterLab 干净安装与最小使用

文章目录

因为在 SAGI 读书会 上给自己挖了个大坑,给公司同事设计了一套 Python 课程,所以要准备一下授课环境了。

目前最好的授课环境当然是 Jupyter,下面讲讲它的配置。

我一直是一个 选择综合症+洁癖患者,尽管我已经不断强迫自己降低要求了。这次的目标是这样的:

  1. 最小化。
  2. 不影响当前的系统环境。

依赖

  1. 操作系统 macOS Big Sur 11.1
  2. conda 4.9.2 (Miniconda)
  3. JupyterLab 3.0.0

JupyterLab 包含 Jupyter+notebook+iPython ,是 Jupyter 项目的下一代用户界面。界面上更友好。网上大量的中文资料都是介绍 Jupyter + notebook 的,比较老了,参考起来可能会有些差异,建议直接看原版文档:JupyterLab

为什么选择

conda

在 Jupyter 里面,你迟早是要跑 Matplotlib 的,为了避免不必要的麻烦,应该选择 conda 而非 pip 。

我在使用 pip 安装 Jupyter 的时候,的确遇到了一些麻烦,主要表现为 matplotlib 安装成功但无法正确导入,以及 numpy 安装报错。报错信息大致为:

 1 raceback (most recent call last):
 2
 3   File "/Users/paul/python/test/t.py", line 2, in <module>
 4     import pandas as pd
 5   File "/Users/paul/python/test/venv/lib/python3.9/site-packages/pandas/__init__.py", line 11, in <module>
 6     __import__(dependency)
 7   File "/Users/paul/python/test/venv/lib/python3.9/site-packages/numpy/__init__.py", line 286, in <module>
 8     raise RuntimeError(msg)
 9 RuntimeError: Polyfit sanity test emitted a warning, most likely due to using a buggy Accelerate backend. If you compiled yourself, see site.cfg.example for information. Otherwise report this to the vendor that provided NumPy.
10 RankWarning: Polyfit may be poorly conditioned

如果一定要在 pip 中解决,可以这么做:

1$ pip cache remove numpy
2$ brew install openblas 
3$ OPENBLAS="$(brew --prefix openblas)" pip install numpy

所以,直接用 conda 比较省事,且不会影响本地原有的 python 环境。

至于 conda/Anaconda/Miniconda 的区别和联系,看官方文档介绍:Conda Doc Home

我做了一些简单的翻译:

  • Miniconda: 最小化的 conda 安装器,仅仅包含 Python,conda 以及 conda 必须的核心最小包,例如 pip/zlib 等等。安装文件有数十 MB。
  • Anaconda: 大而全的 conda 安装器,包含几百个用于科学计算和分析的包,例如 SciPy, NumPy 等等。安装文件有数百 MB。
  • conda:上面两者的包管理器。

我个人建议不要用 brew 安装 conda,直接用 官网提供的方式 来安装会比较容易。

当然,也可以去 清华大学的镜像站 下载,速度会比较快。

禁止 conda 默认进入 base 环境

conda 安装成功后,每次启动命令行工具,都会自动进入 (base) 环境。这会对我造成困扰。因为我的本机还有其他 Python 虚拟环境存在,进入 conda 环境后会导致这些虚拟环境无效。

有两个方法可以解决这个问题:

  1. 默认进入 (base) 环境后,输入代码 conda deactivate 来退出 conda 环境。
  2. 设置 auto_activate_base 配置为 false,让 conda 不自动进入 (base) 环境: conda config --set auto_activate_base false

我当然会选择第二种。

安装和使用 JupyterLab

安装 JupyterLab

安装完毕 Miniconda 之后,创建一个虚拟环境,使用 python3.9,安装 jupyterlab 库。

 1# 创建一个名称为 jupyter 的虚拟环境
 2conda create -n jupyter python=3.9
 3
 4# 激活这个环境
 5conda activate jupyter
 6
 7# 安装 jupyterlab
 8conda install -c conda-forge jupyterlab
 9
10# 启动 jupyterlab
11jupyter lab

解决 BUG

在 notebook 中使用 tab 做自动补全的时候,会报错如下:

1  File "../venv/lib/python3.8/site-packages/IPython/core/completer.py", line 2029, in _complete
2    completions = self._jedi_matches(
3  File "../venv/lib/python3.8/site-packages/IPython/core/completer.py", line 1373, in _jedi_matches
4    interpreter = jedi.Interpreter(
5  File "../venv/lib/python3.8/site-packages/jedi/api/__init__.py", line 725, in __init__
6    super().__init__(code, environment=environment,
7TypeError: __init__() got an unexpected keyword argument 'column'

这是因为 jedi 0.18.0 不支持 iPython 7.19,解决方案:将 jedi 0.18.0 降为 0.17.2。不能使用 conda 安装,因为 conda 中找不到 jedi 这个包。要进入 conda 环境使用 pip 安装。

1# 确保自己在 conda 的 jupyter 环境中,用 pip 安装 1.17.2 版本的 jedi
2pip install jedi==0.17.2

设定启动目录

需要指定 jupyter 中的 notebook 保存的文件夹,否则 JupyterLab 会自动指定 / 为文件夹,这是很不安全的操作。

1# 编辑文件
2vim ~/.jupyter/jupyter_lab_config.py
3
4# 加入下面的行
5c.ServerApp.root_dir = '/Users/zrong/study/jupyter/'
6
7# 重新启动 JupyterLab
8jupyter lab

换源

为了让下载和安装更快速,换用 清华大学提供的镜像源。编辑 ~/.condarc 文件,加入下面的内容:

 1channels:
 2  - defaults
 3show_channel_urls: true
 4channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
 5default_channels:
 6  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
 7  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
 8  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
 9  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
10  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
11custom_channels:
12  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
13  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
14  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
15  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
16  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
17  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

Have Fun

来玩点花样吧。先在 jupyter 环境中安装 matplotlib 和 numpy 这两个库:

1conda install matplotlib numpy

然后在 notebook 中键入如下代码:

1import matplotlib.pyplot as plt
2import numpy as np
3
4plt.plot(np.random.randn(50).cumsum())

效果如下:

matplotlib

参考

全文完