前言

作为一个数据工程师,最喜欢的事情就是不停的在现实的服务端环境调试代码的参数。我们在本地的环境与生产的状况决然不同,我们一开始在本地写代码测试再部署到服务端的三板斧就不适用了。

最好的方式可以直接在linux环境下的服务端直接写代码,分步调试。之前我在银行都是使用集成在CDSW的环境IDE,但是如今我们需要自己拼凑一个可用类似的工具。

这样我们就要用到远程jupyter,即服务端提供jupyter server,而我们只需要直接在本地环境直接使用server暴露的web接口上直接写代码,分步调试运行测试即可。

作为一个仅仅做数据的开发人员,我更喜欢使用pycharm的源码查看,跳转等功能。所以最终我们需要的是一个远程jupyter+pycharm配置的IDE工具。本篇文章就是搭建一个如此好用的神兵利器的博客说明书。

什么是Jupyter notebook?

Jupyter notebook 是一种 Web 应用,基于网页的用于交互计算的应用程序,可用于全过程计算:开发、文档编写、运行代码和展示结果。

以前又称为IPython notebook,是一个交互式笔记本, 支持运行40+种编程语言. 可以用来编写漂亮的交互式文档

Jupyter notebook特别适合做数据处理,其用途可以包括数据清理和探索、可视化、机器学习和大数据分析,源于 Fernando Perez 发起的 IPython 项目。

IPython 是一种交互式 shell,与普通的 Python shell 相似,但具有一些更高级的功能,例如语法高亮显示和代码补全,还有一些 magic 操作,十分方便。Jupyter notebook 将 IPython 做成了一种 Web 应用,它的基本架构如下:

这里的核心是 notebook server,用户通过浏览器连接到该服务器,而 notebook 呈现为 Web 应用。

用户在 Web 应用中编写的代码通过该服务器发送给内核,内核运行代码,并将结果发送回该服务器。然后,任何输出都会返回到浏览器中。保存 notebook 时,它将作为 JSON 文件(文件扩展名为 .ipynb)写入到该服务器中。

此架构的一个优点是,内核无需运行 Python。由于 notebook 和内核分开,因此可以在两者之间发送任何语言的代码。

例如,早期的两个非 Python 内核分别是 R 语言和 Julia 语言。使用 R 内核时,用 R 编写的代码将发送给执行该代码的 R 内核,这与在 Python 内核上运行 Python 代码完全一样。

IPython notebook 已被改名,因为 notebook 变得与编程语言无关。新的名称 Jupyter 由JuliaPython 和 R 组合而成。

  servers:jupyterhub 需要登录的多用户笔记本
       tmpnb 不需要登录的临时笔记本
       nbgrader 作为任务创建和分级的笔记本
       nbviewer 网站笔记本的HTML视图

  Applications: nbconvert 将笔记本文件转换为其他格式
        notebook Jupyter notebook 应用相当于Django的app
        qtconcle 控制应用
        jupyter_consle Jupyter 终端应用

  API:nbformat ipython 文件下载,保存,格式版本迁移和信托
    jupyter_client
    jupyter_core jupyter命令,配置文件和文件系统位置

  Kernerl : ipywidgets 交互组件
       ipython python代码执行,魔法语法和ipython终端交互
       ipykernel 内核通讯协议
       traitlets 所有依赖:配置系统和小部件基础层

1.安装指南:

1.安装jupyter

我们已经安装anaconda环境,conda activate user后 直接执行如下命令

conda install jupyter

安装成功后按如下步骤:

1. 前置条件:一个配置文件

第一步就生成配置文件 jupyter_notebook_config.py

jupyter notebook --generate-config

如果是root 用户执行时需要加上 --allow-root 选项

jupyter notebook --generate-config --allow-config

2. 生成密码

bash生成

jupyter notebook password
Enter password: xxxx
Verify password: xxxx
[NotebookPasswordApp] Wrote hashed password to /home/rdev/jupyter/jupyter_notebook_config.json

也可以python环境下生成

>from notebook.auth import passwd
>passwd()
Enter password:xxxxx
Verify password:xxxxx
res: 'sha1:xxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

passwd() 方法在没有传入参数时候,会如上所示提示输入和验证密码,它也可以传入一个字符串作为密码,即 passwd('12345') ,但不建议这种做法,因为本来输入命令都会被保存起来,直接输入密码,相当于密码以明文方式保存在输入历史。

3.添加到配置文件

将哈希密码添加到配置文件 jupyter_notebook_config.py

# ip 设置为 *
c.NotebookApp.ip = '*'
# 密码 设置为 sha1
c.NotebookApp.password = u'sha1:xxxxx:xxxxxxxxxxx<your hashed password here>'
# 浏览器设置不打开
c.NotebookApp.open_browser = False
# 设置一个固定的接口
c.NotebookApp.port =

1.官方教程是建议 c.NotebookApp.ip 设置为 * ,但实际上这样操作可能会连接失败,所以可以选择设置为 0.0.0.1 或者就是服务器的 IP

2.服务器端口默认为80,但是80端口基本都会被占用建议设置8888或者8899等等

4.采用 SSL 加密通信(可选)

采用密码的同时使用带有网站证书的 SSL ,可以避免哈希的密码被非加密的形式发送给浏览器。

但是一般运维人员会只暴露服务器端口给公司的网段,所以这一项是可选项。

可以是先使用openssl命令生成ssl证书和key

 openssl req -x509 -nodes -days  -newkey rsa: -keyout sslkey.key -out sslcert.pem

再修改配置文件:

# 证书的信息
c.NotebookApp.certfile = u'/home/rdev/sslcert.pem'
c.NotebookApp.keyfile = u'/home/rdev/sslkey.key'

4.启动jupyter

启动的时候就可以不带后面的参数

1.带参数

jupyter notebook 

2.不带参数

jupyter notebook --certfile=sslcert.pem --keyfile sslkey.key

2.pycharm集合jupyter

建立项目后,创建ipynb文件,选择相应的服务器地址,端口为8888 token就是登入密码

3.jupyter Notebook 扩展工具

如果没有安装插件管理器,打开jupyter notebook后菜单栏只有如下3项,

  • Files
  • Running
  • Clusters

我们需要安装插件管理器来管理我们需要的插件,

第一步:用conda安装插件管理包

conda install -c conda-forge jupyter_contrib_nbextensions
conda install -c conda-forge jupyter_nbextensions_configurator

并导航至新的 Nbextensions 选项卡:

勾选disable configuration for nbextensions without explicit compatibility (they may break your notebook environment, but can be useful to show for nbextension development),否则下方插件是不可选状态。

5款NB 的插件。

    • Table of Contents
    • Execute Time
    • Nofity
    • Codefolding
    • Hinterland

1.Table of Contents:使用链接Table of Contents 的方式追踪定位所有单元格

2.Autopep8:规范化代码

3.variable inspector:显示你在 notebook 中创建的所有变量的名称,以及它们的类型、大小、形状和值。

4.ExecuteTime:显示单元格的运行时间和耗时

不过我感觉都不如pycharm香!!!!

4.快捷键:

红框里是绿色时,为编辑模式,在命令模式时按 Enter 会进入编辑模式;

红框里是蓝色时,为命令模式,在编辑模式时按 ESC 会进入命令模式;

通用模式(编辑模式与命令模式均可)快捷键:

  • 调出控制面板:Ctrl + Shift + P

  • 运行当前单元格,选中下方单元格:Shift + Enter

  • 运行当前单元格:Ctrl + Enter

  • 运行当前单元格,在下方插入新单元格:Alt + Enter

  • 保存 ipynb 文件:Ctrl + S

编辑模式快捷键

  • 切换为命令模式:ESC

  • 在光标处分割单元格:Ctrl + Shift + 减号

  • 光标挪至行首或行尾:Alt + ←或→

  • 按单词挪动光标:Ctrl + ←或→

  • 缩进:TAB

  • 取消缩进:Shift + TAB

  • 删除光标前的整个单词:Ctrl + Backspace

  • 删除光标后的整个单词:Ctrl + Delete

  • 显示函数提示:Shift + TAB,按一次显示简略信息,按两次显示详细信息,按三次 10 秒内固定显示,按四次,函数信息固定显示在界面下方。

  • 移动到上一个单元格:↑

  • 移动到下一个单元格:↓

  • 复制光标所在整行:Ctrl + C,注:不要选择任何内容

  • 剪切光标所在整行:Ctrl + X,注:不要选择任何内容

  • 其它复制、剪切、黏贴、重做、取消等快捷键与 Windows 标准快捷键一样。

命令模式快捷键

  • 切换为编辑模式:Enter

  • 选中单元格改为代码格式:Y

  • 选中单元格改为 Markdown 格式:M

  • 选中单元格改为原生格式:R

  • 当前单元格上方插入单元格:A

  • 当前单元格下方插入单元格:B

  • 删除选中单元格:DD,即连续按两次 D 键

  • 恢复删除的单元格:Z

  • 复制选中单元格:C

  • 剪切选中单元格:X

  • 黏贴选中单元格:V

  • 查找与替换内容:F

  • 隐藏 / 显示输出内容:O

  • 隐藏 / 显示代码行号:L

  • 扩展选择当前单元格上方单元格:Shift + ↑

  • 扩展选择当前单元格下方单元格:Shift + ↓

  • 合并多个单元格:Shift + M

  • 重启内核:00,即连续按两次

5.像数据科学家一样使用notebook

如何用notebook做一个综合代码,数据,ppt和excel以及pdf的数据报告

Qgrid

Qgrid也是一个Jupyter的小部件,不过它主要用于数据帧,装上之后,就可以像操作Excel里的筛选功能一样,方便的处理数据。

# only required if you have not added conda-forge to your channels yet
conda config --add channels conda-forge
conda install qgrid

使用:

import qgrid
excel_grid=qgrid.show_grid(df.head(20),show_toolbar=True)
excel_grid

# pip
pip install ipywidgets
jupyter nbextension enable --py widgetsnbextension
# Conda
conda install -c conda-forge ipywidgets
#Installing ipywidgets with conda automatically enables the extension

远程jupyter+pycharm配置的更多相关文章

  1. Ubuntu 远程 Jupyter 配置

    Ubuntu 远程 Jupyter 配置 每次上课都要重新部署环境,最近看到阿里云的大学生优惠活动,就着手了一台云服务器,于是就把环境部署在上面了. 环境:阿里云 Ubuntu 16.04 64位 新 ...

  2. PyCharm 配置远程python解释器

    配置过程 本机环境 操作系统:win10 IDE:Pycharm 远程服务器 操作系统:ubuntu14.04 配置了ssh,可以使用ssh进行远程登陆 配置Deployment 首先,在pychar ...

  3. PyCharm 配置远程python解释器和在本地修改服务器代码

    PyCharm 配置远程python解释器和在本地修改服务器代码 最近在学习机器学习的过程中,常常需要将本地写的代码传到GPU服务器中,然后在服务器上运行.之前的做法一直是先在本地写好代码,然后通过F ...

  4. PyCharm配置gitHub远程仓储

    在一个团队里,编码不能是闭门造车,git学起来: 1. GIT的基本介绍.安装及使用教程- @廖雪峰 2. pycharm配置github远程仓储- @谢小小XH

  5. PyCharm配置远程Docker环境

    1. docker 配置 使用-p参数暴露一个端口用于ssh连接. docker run -itd --name wangchao_paddle --gpus all -p 8899:8888 -p ...

  6. pycharm配置可视化数据库

    出于数据库安全性,数据库管理员会给数据库配置SSH,也就是为数据库增加一个安全协议(通信加密),加大外部用户对该数据库远程连接的难度. 利用SSH通道来连接远程数据库时需要以下信息:远程数据库服务器I ...

  7. Maven远程仓库的配置

    在很多情况下,默认的中央仓库无法满足项目的需求,可能项目需要的构件存在于另外一个远程仓库中,如JBoss Maven仓库.这时,可以在POM中配置该仓库,见代码如下: <!-- 远程仓库的配置 ...

  8. PyCharm配置autopep8,自动格式化Python代码

    1. 关于PEP 8 PEP 8,Style Guide for Python Code,是Python官方推出编码约定,主要是为了保证 Python 编码的风格一致,提高代码的可读性. 官网地址:h ...

  9. Android源码浅析(六)——SecureCRT远程连接Linux,配置端点和字节码

    Android源码浅析(六)--SecureCRT远程连接Linux,配置端点和字节码 需要编译源码的同学,一般都是win+虚拟机吧,但是再虚拟机里体验并不是很好,所有市面上有很多的软件能够做到在wi ...

随机推荐

  1. torch.Tensor和numpy.ndarray

    1. torch.Tensor和numpy.ndarray相互转换 import torch import numpy as np # <class 'numpy.ndarray'> np ...

  2. 029 Android 轮播图广告Banner开源框架使用

    1.Banner介绍 现在的绝大数app都有banner界面,实现循环播放多个广告图片和手动滑动循环等功能. 2.使用环境配置(具体可见github开源项目) (1)添加依赖 在build.gradl ...

  3. 023 Android 自定义Toast控件

    1.Toast自定义控件工具类 package com.example.administrator.test62360safeguard.Utils; import android.content.C ...

  4. stm32片上ADC转换实验

    原理图所示: BAT_DET 接到PB0 引脚,VSYS 是直流3.7V的电压.再来看下103的adc转换和引脚GPIO的关系 我们直接选用ADC1 根据上表格只能使用通道8 下面给我常用的ADC1寄 ...

  5. 剑指offer27:按字典序打印出该字符串中字符的所有排列

    1 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: ...

  6. zabbix+orabbix安装

    zabbix + orabbix 监控oracle数据库 zabbix 监控搭建 一,LNMP环境搭建 LNMP环境搭建.md 二,zabbix服务端安装配置 (1)下载zabbix并安装 所有版本下 ...

  7. python 之 数据库(内置函数、流程控制、索引)

    10.17 内置函数 强调:mysql内置的函数只能在sql语句中使用 #数学函数 round(x,y) #返回参数x的四舍五入的有y位小数的值 rand() #返回0到1内的随机值,可以通过提供一个 ...

  8. PAT甲级满分有感

    时间轴: 2017年,数据结构加入了我的课程清单. 2018年12月,我从网易云课堂下载了数据结构的所有课程视频(学校里没有网,只能离线看),开始一刷.一刷只看了视频,基本没有做题,看到AVL树的时候 ...

  9. spring整合MQ

    ---恢复内容开始--- 一. 导入依赖 <dependencies> <!-- ActiveMQ客户端完整jar包依赖 --> <dependency> < ...

  10. K-th occurrence HDU - 6704 (SA, 主席树)

    大意: 给定串$s$, $q$个询问$(l,r,k)$, 求子串$s[l,r]$的第$k$次出现位置. 本来是个简单签到题, 可惜比赛的时候还没学$SA$...... 好亏啊 相同的子串在$SA$中是 ...