前
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
# 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配置文件中手工配置的密码会无效
7、后续操作
因为手头有域名,所以我使用nginx为jupyter notebook配置了域名访问,然后使用certbot为其配置了免费的https证书
就很香!