由于博主多次在Linux远程服务器上使用conda配置r内核的jupyter notebook,但每次时间一久就会忘记某些步骤(最主要是一样的坑每次都会踩出不一样的问题)。
在综合网上相关教程以及自己的亲身经验后,总结出一份关于 Conda 、R 、Jupyter 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
安装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)。
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了;
如果还不能正常启动,请继续往下阅读**【异常处理】**。
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 版本,下面的修改方法会被逐渐弃用:
截止更新日期,修改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"