ECS使用conda进行Python多版本管理并安装Jupyter notebook

ECS使用conda进行Python多版本管理并安装Jupyter notebook

Scroll Down

CentOS7默认安装的Python 2.7.5,yum 等工具默认使用的也是Python 2.7.5,如果你删除了Python 2.7.5 就会导致yum无法使用等等一系列问题,CentOS也在8之后抛弃了Python 2.7.5,其支持的yum等工具也被换成了dnf

我在多种Python多版本管理工具中选择了Anaconda,倒不是我对它有多了解,只是因为用conda安装jupyter notebook比较方便,嘿嘿

1、Anaconda介绍

Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531 MB),如果只需要某些包,或者需要节省带宽或存储空间,也可以使用Miniconda这个较小的发行版(仅包含conda和 Python)。

conda其实就是一个开源的包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换。而我需要用到的就是conda

2、安装conda
# 安装清华镜像源的5.2.0版本
# wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.sh 
# 执行改sh文件
# sh Anaconda3-5.2.0-Linux-x86_64.sh
# 脚本执行过程根据个人需求进行相关更改
# 
# 如果报错:bunzip2: command not found
# 解决:yum install -y bzip2(具体系统使用具体包管理器)
# 
# 安装过程根据提示将conda添加到用户目录下的.bashrc之后,并使其生效
# echo ". /root/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc
# source ~/.bashrc

conda命令使用备忘:

# 1)创建环境
# conda create --name 环境名  python=版本
例:conda create --name python37 python=3.7.0

# 2)激活使用python3.7.0环境
# conda activite 环境名
例:conda activte python37

# 3)退出python3.7.9环境
例: conda deactivate

# 4)对特定虚拟环境安装额外的包
# conda install -n 环境名称 [Package]
例: conda install -n python37 pytorch==1.5.0 torchvision==0.6.0
# 经测试,只要激活了虚拟环境后,用pip直接安装也可以,安装的包是直接在虚拟环境里面

# 5)删除环境内的某个包
# conda remove --name 环境名 包名
例:conda remove --name python37 pytorch

# 6)查看当前安装了哪些包
# conda list

# 7)删除虚拟环境
# conda remove --name 环境名 --all
3、jupyter简介

Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。

4、conda配置Jupyter notebook

根据官网安装文档安装Jupyter notebook

(python37)# conda install -c conda-forge notebook

因为我的操作环境是是ECS,所以先要在云服务商的控制台安全组开启端口,然后ECS防火墙开端口

这里我的错误经验是:

直接在命令行指定端口、指定启动服务不使用浏览器
# jupyter notebook --no-browser --port 9999 --allow-root

然后我遇到的问题是,web访问测试失败,使用netstat -antp | grep排查问题,端口已经启用。然后本地访问测试127.0.0.1发现可以访问,那么问题就是公网无法访问,然后自己排查发现jupyter notebook监听的IP是ECS的127.0.0.1回环接口,而ECS的公网IP是绑定在主接口上,所以导致无法访问,所以我就生成了jupyter notebook的配置文件,将监听端口修改为本地主接口。解决问题!

# 为jupyter notebook生成一个配置文件
# jupyter notebook --generate-config

# vim /用户家目录/.jupyter/jupyter_notebook_config.py
# 修改配置文件以下地方即可

# 监听服务器的IP地址
## The IP address the notebook server will listen on.
#  Default: 'localhost'
c.NotebookApp.ip = '192.168.0.185'

# 监听的端口
## The port the notebook server will listen on (env: JUPYTER_PORT).
#  Default: 8888
c.NotebookApp.port = 9999

# 是否在启用时打开浏览器
#  configuration option.
#  Default: True
c.NotebookApp.open_browser = False

# 设置登陆密码,启用密码之后web界面就没有token登陆的选项了
# 密码是有格式要求的,不是简单的字符串 ( 可以参考下文生成json密码文件内的格式 )
#  The string should be of the form type:salt:hashed-password.
#  Default: ''
c.NotebookApp.password = ' 密码 '

# 设置jupyter notebook工作家目录
## The directory to use for notebooks and kernels.
#  Default: ''
c.NotebookApp.notebook_dir = ' 目录 '
5、后台启动Jupyter notebook
# 创建链接
# ln -s /usr/local/src/anaconda/anaconda3/bin/jupyter /usr/local/bin/jupyter

# 后台启动
# nohup jupyter notebook --allow-root > /usr/local/src/anaconda/anaconda3/jupyter.log 2>&1 &

# 测试访问:http://IP:Port

image.png

# jupyter notebook list
# 这个命令可以列出web登陆的URL,也可以设置一个密码登录,在表单输入框只用填入 “ token= ” 后边的内容即可

6、设置密码验证

首次登陆会被要求输入token,并设置密码,下次登陆就只能使用密码进行登陆了

jupyter notebook 5.0 之后可以通过命令行直接设置密码,输入密码并确认之后,密码会以hash值的方式存放到 '/用户家目录/.jupyter/jupyter_notebook_config.json ' 文件中

# jupyter server启动之后可以使用命令修改密码
# jupyter notebook password
Enter password: ****
Verify password: ****
[NotebookPasswordApp] Wrote hashed password to /用户家目录/.jupyter/jupyter_notebook_config.json

用户也可以手工生成密码的hash值并设置到配置文件jupyter_notebook_config.py 中,但是 .json配置文件的优先级高于.py配置文件,如果.json文件中已经配置了密码,.py配置文件中手工配置的密码会无效

image.png

7、后续操作

因为手头有域名,所以我使用nginx为jupyter notebook配置了域名访问,然后使用certbot为其配置了免费的https证书

就很香!

1、jupyter notebook配置总览
2、jupyter notebook官网安全文档