前言
作为一个数据工程师,最喜欢的事情就是不停的在现实的服务端环境调试代码的参数。我们在本地的环境与生产的状况决然不同,我们一开始在本地写代码测试再部署到服务端的三板斧就不适用了。
最好的方式可以直接在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 由Julia
、Python
和 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 = 8888
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 365 -newkey rsa:2048 -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 选项卡:
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