conda 和 JupyterLab 干净安装与最小使用
文章目录
因为在 SAGI 读书会 上给自己挖了个大坑,给公司同事设计了一套 Python 课程,所以要准备一下授课环境了。
目前最好的授课环境当然是 Jupyter,下面讲讲它的配置。
我一直是一个 选择综合症+洁癖患者,尽管我已经不断强迫自己降低要求了。这次的目标是这样的:
- 最小化。
- 不影响当前的系统环境。
依赖
- 操作系统 macOS Big Sur 11.1
- conda 4.9.2 (Miniconda)
- 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 环境后会导致这些虚拟环境无效。
有两个方法可以解决这个问题:
- 默认进入
(base)
环境后,输入代码conda deactivate
来退出 conda 环境。 - 设置
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())
效果如下:
参考
- BUG: Python 3.9 Polyfit sanity test emitted a warning
- Last jedi release (0.18.0) is incompatible with ipython (7.19 and 7.18 tested); reason - column arg was deprecated, and now removed #12740
- 清华大学 Anaconda 镜像使用帮助
- JupyterLab Doc Home
- 清华大学的镜像站 Miniconda 下载
- 安装 conda
- 文章ID:2735
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/conda-and-jupyter-lab/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。