基于CentOS7安装Jupyter Notebook
概述
由于我的开发环境是CentOS,现在主要是以Python为主,偶尔夹杂C/C++和GoLang语言。在本地开发、测试、提交git和在生产环境再去测试、开发,并且会在生产环境会有临时性的开发任务和调整,都是比较浪费时间的。不建议直接修改生产环境的代码,临时性的修改后一定要测试并稳定运行一段时间。 写这篇博客主要是为了利用线上资源,实现跨平台开发和测试代码示例用的。所以就在服务器安装了IPython,Jupyter和Notebook。
安装和配置
在安装IPython,Jupyter和Notebook时,不仅需要安装Python和Pip,而且还需要安装一些开发操作系统的工具集比如(‘Development Tools‘)。废话少说,直接写代码。
基本包安装
yum update -y
yum install python-pip -y
yum install bzip2 -y
yum groupinstall "Development Tools" -y
安装完pip之后,最好把pip源改为国内源,修改如下:
mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF
由于服务器的生产环境的packages较多,版本也不一致,所以需要安装virtualenv和virtualenvwrapper并配置。
pip install virtualenv virtualenvwrapper
nano .bashrc或者.bash_profile
#设置虚拟独立python环境目录
export WORKON_HOME=$HOME/xxxx
#设置创建项目的目录
export PROJECT_HOME=$HOME/xxxx
source /usr/local/bin/virtualenvwrapper.sh
#退出然后运行如下命令
source .bashrc或者.bash_profile
现在只需要通过pip安装IPython,Jupyter和Notebook即可。
pip install ipython jupyter notebook
所有需要的安装现在全部完毕,下面我们来配置使其生效。
配置
我了实现我们自定制设置,我们需要通过如下配置来完成,我们首先要生成一个jupyter的配置文件。
jupyter notebook --generate-config
#生成的config file在/home/user/.jupyter/jupyter_notebook_config.py
然后我们为了比较安全的访问服务器资源,我们需要设置登录密码和设置https来实现安全登录。如果有条件可以通过安全认证中心来发放秘钥和认证。首先打开ipython,生成sha1的密码,如下:
from notebook.auth import passwd
passwd()
#Enter password
#output sha1:49acd1a985cc:beb1fb6859665bfa721e65e78fc511c41basdasa.
然后生成一个自签名认证的key,如下:
openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout jkey.key -out jcert.pem
最后如下配置即可:
emacs /home/user/.jupyter/jupyter_notebook_config.py
c.NotebookApp.password = 'sha1:<your-sha1-hash-value>'
c.NotebookApp.port = 8888
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.certfile = '/home/user/jcert.pem'
c.NotebookApp.keyfile = '/home/user/jkey.key'
#保存退出即可
使用
由于jupyter使用的8888作为默认端口,所以我需要把端口给开放并重启防火墙。通过如下代码设置:
firewall-cmd --zone=public --add-port=8888/tcp --permanent
systemctl restart firewalld.service
到这里所有的安装和基本的设置都已经完成,直接在命令行输入:jupyter notebook.就可以使用了。
- RavenDb学习(二)简单的增删查改
- RavenDb学习(九)高级特性下半部分
- RavenDb学习(三)静态索引
- 从头编写 asp.net core 2.0 web api 基础框架 (1)
- 使用Identity Server 4建立Authorization Server (6) - js(angular5) 客户端
- 如何实现超高并发的无锁缓存?
- 使用Identity Server 4建立Authorization Server (5)
- 多库多事务降低数据不一致概率
- 利用Python实现DGA域名检测
- 一个“爆款”成功的API,都离不开这8条设计准则
- RavenDb学习(八)高级特性上半部分
- 微信钱包中58到家首页为什么这么快
- hbase源码系列(二)HTable 探秘
- hbase源码系列(三)Client如何找到正确的Region Server
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring 中基于注解的事务控制及原理分析
- Spring 中根据环境切换配置 @Profile
- Spring 中的属性赋值
- Spring 中控制 Bean 生命周期的几种方式及 BeanPostProcessor 执行原理
- Spring 中的 @Import 注解及向容器中添加 Bean 的几种方式
- Spring 注解开发之 @Conditional
- JDBC 技术应用实践:网上书城后台管理系统
- 思科模拟器:路由器基本配置
- 思科模拟器:实验五——高级路由实验
- 从零开始重新认识 SpringMVC
- 字节跳动Android实习面试凉凉经,两轮面试我被完虐了...
- 高效、简单、方便管理与维护的开源运维工单系统
- python数据库入门编程。
- EasyExcel导出自定义合并单元格策略
- CMake学习笔记