前言

由于博主多次在Linux远程服务器上使用conda配置r内核的jupyter notebook,但每次时间一久就会忘记某些步骤(最主要是一样的坑每次都会踩出不一样的问题)。

在综合网上相关教程以及自己的亲身经验后,总结出一份关于 CondaRJupyter Notebook 的“安装指北”,供大家以及将来的我参考。

指北

安装Conda

首先介绍一下Conda、Anaconda以及两者之间的一些联系:

Conda是个包管理器,可以支持二进制包,所以不需要安装时从源码编译了,而且也可以装原生库。但是,一些 pip 里的 Python 库在 conda 里找不到。

  • Anaconda是用Conda管理的Python科学计算发行版。
  • Conda Forge是另一个Python发行版,要比Anaconda的包更丰富。但这里有个坑就是Conda Forge和Anaconda并不完全兼容,如果你有一个项目同时用到Anaconda和Conda Forge里的包,有可能会挂。

通常我使用的服务器都是事先安装好了Anaconda的,

下面推荐一下Anaconda官方出品的 Linux系统安装Anaconda 的文档,有很详细的步骤说明以及命令解释。

2022.10.17 更新Linux-Centos7下安装Anaconda流程:

由于国内的特殊环境,还是推荐直接在清华大学镜像源等国内源下载Anaconda安装脚本,通常选择x86_64版本

镜像源下载脚本

Chrome可以右键选择复制文件链接地址,然后在centos使用wget下载:

1
2
3
4
5
6
# 下载脚本
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2022.05-Linux-x86_64.sh
# 如果提示没有wget 使用yum安装
yum install wget
# 执行安装脚本 脚本名自行更改
bash Anaconda3-2022.05-Linux-x86_64.sh

下面是我自己遇到的一些选项,记录一下。请按照自己的情况,按照脚本提示输入:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 按照提示输入ENTER(回车)
Welcome to Anaconda3 2022.05

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>> ENTER

# 按照提示输入yes
Do you accept the license terms? [yes|no]
[no] >>>
Please answer 'yes' or 'no':'
>>> yes

# 按照提示输入ENTER(回车)
# Anaconda3 will now be installed into this location:
/root/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/root/anaconda3] >>> ENTER

# conda初始化 默认no 建议输入yes
# 如果选择了no 则需要自行配置环境变量(百度关键词 anaconda 环境变量)
installation finished.
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] >>> yes

# 下面是一些提示 简单翻译了一下
# 要让conda生效 需要关闭再重新打开当前shell(重新连接ssh)
# 如果不需要启动时激活conda基础环境 输入 conda config --set auto_activate_base false
==> For changes to take effect, close and re-open your current shell. <==

If you'd prefer that conda's base environment not be activated on startup,
   set the auto_activate_base parameter to false:

conda config --set auto_activate_base false

Anaconda就安装完成了,顺便推荐添加国内源:

1
2
3
4
5
6
7
8
9
# 添加中科大源
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
# 下载时显示源地址
conda config --set show_channel_urls yes

更新国内源

创建环境

本人是直接创建一个新的conda环境来避免依赖冲突,最省事。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 查看已有的conda环境
conda env list
# 根据名字创建新环境
# your_new_name_to_conda 替换成 你希望的环境名称
conda create -n your_new_name_to_conda
# 激活新环境
conda activate your_new_name_to_conda
# 查看已安装的依赖包
# 新环境当然是没有任何东西的
conda list
# 退出新环境
conda deactivate

命令行conda

安装R

这里需要注意不能直接使用 conda install r 来安装R。

直接输入上面的命令的话,安装的将是3.6版本(好像是)的R,此版本太老了,许多R的包都不能使用。截止2022.10.10,R的conda最新版本是4.2.1。

下面将讲解如何安装最新版本的R(4.2.1)。

1
2
# conda通过conda-forge安装r-base
conda install -c conda-forge r-base

conda-forge在文章开头也介绍了,我感觉可以理解成Linux里面的一个发行版???

在确认安装之前(也就是输入y之前),可以事先确定一下r-base的版本是不是4版本以上(目前是4.2.1)。

4.2.1版本

2023.7.18 更新:

如果使用上述命令指定通过conda-forge安装r-base,但最终安装版本仍然不是最新版本(截止本文修改时最新版本是4.3.1),而是3.x.x老版本,可以尝试指定r-base版本号进行安装。

查看最新版本

1
2
3
4
5
# 首先通过搜索r-base包版本找到最新
conda search -c conda-forge r-base
# 划到最下面可以看到最新的版本号
# 然后指定版本号安装(这里以4.3.1为例)
conda install -c conda-forge r-base=4.3.1

安装R内核和Jupyter

1
2
3
4
# 指定使用默认源安装
# r-irkernel是jupyter notebook的r内核
# jupyter包含了jupyter notebook
conda install -c defaults r-irkernel jupyter

注意:

这里不要使用conda-forge安装r-irkernel和jupyter。

前面也提到,Conda Forge和Anaconda并不完全兼容。亲自尝试过使用conda install -c conda-forge r-irkernel jupyter命令安装,jupyter notebook无法正常启动。这时只需要卸载再重新安装即可:

1
2
3
4
# 卸载
conda uninstall r-irkernel jupyter
# 安装
conda install -c defaults r-irkernel jupyter

启动Notebook

如果前面一切顺利的话,这里就能够正常启动Jupyter Notebook了,也可以创建R的notebook了;

如果还不能正常启动,请继续往下阅读**【异常处理】**。

正常运行Notebook

1
2
# 启动Jupyter Notebook
jupyter notebook

异常处理

模块缺失

如果在启动notebook时提示 ModuleNotFoundError: No module named ‘zmq.backend.cffi._cffi’ ,如下图类似的情况:

模块缺失

解决方法可以参照官方仓库下的一个issue,使用pip卸载相关模块再重新安装:

1
2
3
# 使用pip而不是conda管理pyzmq包
pip uninstall pyzmq
pip install pyzmq

亲测有效。

出现类似的 ModuleNotFoundError(模块找不到)问题都可以尝试用以上方法,使用pip替代conda管理那些python包,先卸载再重新安装。

主要是要找到那个准确的包名,可以尝试在pypi搜索关键字。

端口占有

由于是实验室多人共用的服务器,notebook默认的8888端口也被占用了。下面是解决方法:

2023.10.31 更新

最近notebook升级到了7版本,下面的修改方法会被逐渐弃用:

notebook7 改动

截止更新日期,修改password的原代码已经不能使用,请 notebook 7 版本使用如下方法修改密码:

1
2
3
4
5
6
7
$ ipython
Python 3.11.5 (main, Sep 11 2023, 13:54:46) [GCC 11.2.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.15.0 -- An enhanced Interactive Python. Type '?' for help.
# 这里导入有改动
In [1]: from jupyter_server.auth import passwd
In [2]: passwd()

或者直接命令行输入jupyter server password进行设置:

设置密码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
ipython
# 进入python控制台
Python 3.7.13 (default, Mar 29 2022, 02:18:16) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.31.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from notebook.auth import passwd

In [2]: passwd()
Enter password: 
Verify password: 
Out[2]: 'argon2:$argon2id$v=19$m=10240,t=10,p=xxxxxxxxx' # 复制''之间的内容 后面需要

In [2]: exit

jupyter notebook --generate-config # 这里会提示你生成的文件在哪里
vim ~/.jupyter/jupyter_notebook_config.py # 这里编辑上一步提示的文件

# 新增加或者修改如下内容
c.NotebookApp.allow_remote_access = True
c.NotebookApp.ip='*'
c.NotebookApp.password = u'argon2:$argon2id$v=19$m=10240,t=10,p=8$Vc5lLVsXKZLGftp6xrHfEfOkQvIU5YiOhdw' #粘贴之前复制的密钥
c.NotebookApp.open_browser = False
c.NotebookApp.allow_root = True # 允许以root身份运行
c.NotebookApp.port = 61111 # 设置端口 注意别跟别人的重复了
c.NotebookApp.notebook_dir = '/home/xxx/' # 非必要 设置jupyter默认目录

# 设置好后 应该就能正常访问了
jupyter notebook

美化增强

这部分内容不是必要的,仅做记录。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 配置主题
pip install jupyterthemes
# 个人喜欢并且已经习惯了的一套主题设置
jt -t monokai -f fira -fs 13 -cellw 90% -ofs 11 -dfs 11 -T -N
# 恢复默认主题
jt -r
# 配置插件
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
# 安装插件管理器 这一步可能会失败 详见后文更新1
pip install jupyter_nbextensions_configurator
# 建议配置项
# Hinterland 代码补全
# Collapsible headings 折叠标题
# Notify 通知机制,跑一些耗时较久的任务,完成后通知
# zenmode 隐藏活动状态栏,方便注意代码
# ExecuteTime 显示运行的时间

插件

感谢

所有热心分享教程经验的网友

更新1

我在2023.03.20重复此教程时发现 Nbextensions 标签不会出现,经查阅,是插件未更新适配依赖包 nbclassic 的新版本导致。

详见GitHub的issue

解决方法:降级依赖包版本即可。后续官方可能会更新适配。

1
pip install "nbclassic<0.5"