JupyterLab使用教程

Jupyter源于Ipython Notebook项目,是使用Python(也有R、Julia、Node等其他语言的内核)进行代码演示、数据分析、机器学习、可视化、教学的非常好的工具,对Python的愈加流行和在AI领域的领导地位有很大的推动作用。
Jupyter目前支持超过40种编程语言,包括 Python, R, Julia, and Scala等。
最新的基于web的交互式开发环境,适用于notebook、code和data。其灵活的界面允许用户配置和设计数据科学、科学计算、计算新闻和机器学习领域的工作流。模块化设计可以轻松的实现更多扩展功能。
本文主要讲解Jupyterlab的基本使用。
pip install jupyterlabjupyter lab上一代的基于 Web 的交互式开发环境,其功能在JupyterLab中已经包含,建议使用JupyterLab。
pip install jupyterjupyter notebookNBClassic 将基于 Jupyter Server运行Jupyter Notebook。
这个项目为JupyterLab和其他前端切换到Jupyter服务器作为Python Web应用程序后端做准备。使用这个包,用户可以在新的Python服务器后端上并排启动Jupyter Notebook、JupyterLab和其他前端。
pip install nbclassicjupyter nbclassic控制台前端
pip install jupyter-consolejupyter consoleQt控制台是一个非常轻量级的应用程序,在很大程度上感觉像一个终端,但它提供了一些只有在GUI中才可能实现的增强功能,例如内联图形、带有语法高亮显示的多行编辑、图形化调用提示等等。Qt控制台可以使用任何Jupyter内核。
pip install qtconsolejupyter qtconsoleVoilá允许你将Jupyter笔记本转换成一个交互式仪表板,让你可以与他人分享你的工作。
pip install voilavoila <path-to-notebook> <options>所有其他接口(包括Notebook、Qt控制台、ipython控制台和第三方接口)都使用IPython Kernel。IPython Kernel是一个独立的进程,负责运行用户代码,以及计算可能的完成情况。前端(如Notebook或Qt控制台)通过使用ZeroMQ套接字发送的JSON消息与IPython内核进行通信;前端和IPython内核之间使用的协议在Jupyter中的消息传递中进行了描述。

这种设计的目的是允许基于同一内核轻松开发不同的前端,同时,也可以通过开发新的内核来支持新的编程语言。目前有两种方法可以为另一种语言开发内核:

Jupyter Notebooks是包含了代码、元数据、内容和输出的结构化数据。当保存到磁盘时,文件扩展名为.ipynb,并使用JSON结构。有关notebook格式结构和规范的更多信息,请参阅nbformat文档。
Notebook server:不是内核,它主要负责保存和加载notebook,所以你可以编辑notebook,即使你没有该语言的内核(当然也无法运行代码)。
Kernel:对notebook文档一无所知:当用户运行它们时,它只接收要执行的代码单元。

使用工具 Nbconvert 将notebook文件导出为其他格式,比如HTML, LaTeX, 或者reStructuredText等。转换过程如下:

Preprocessors:在内存中修改notebook。比如:ExecutePreprocessor运行notebook中的代码并更新输出
Exporter: 转换notebook为其他格式。
Postprocessors:处理导出的文件。
下面是截至2017年的项目关系的图:

Jupyter lab是Jupyter的下一代基于Web的交互式开发环境,是 Jupyter Notebook的升级版。
在安装JupyterLab之前,需要安装Python环境:
如果安装的Anaconda发行版,该版本已经包含了JupyterLab,所以不需要再另外安装,否则按如下命令进行安装。
# 安装前先升级下pip
python -m pip install --upgrade pip
# 开始下载安装pip
pip install jupyterlab
# 如果已经安装过JupyterLab,可以使用下面的命令更新到新版本
pip install --upgrade jupyterlab
安装好后,启动JupyterLab
jupyter lab
默认情况下,启动成功后,会自动打开浏览器进入JupyterWeb界面(建议将Chrome、Edge或者firefox浏览器设为默认浏览器,不要使用IE浏览器),如果看到2中的界面,表示成功了。

当点击左边栏的文件浏览(File Browser)按钮,可以查看到notebook的root目录下的文件,上面有添加文件和文件夹、上传文件、刷新文件列表等按钮。
右边是notebook的工作区域, 整个notebook由单元格(cell)组成,以工作区域的上面有notebook的保存、单元的添加、删除、运行、单元类型切换等按钮。
该方式起源于vim编辑器。
由启动jupyterLab的启动参数--notebook-dir指定
jupyter lab --notebook-dir="E:/Projects"
如果没有指定参数--notebook-dir,则由配置文件中的参数c.ServerApp.root_dir指定
配置文件可以通过下面命令生成(可参考第五部分内容进行设置):
jupyter lab --generate-config
如果配置文件中也没有指定,工作目录由启动JupyterLab时的当前路径决定。
Notebooks是包含了代码、元数据、内容和输出的结构化数据。当保存到磁盘时,文件扩展名为.ipynb(存储在工作目录下的某个子目录中),并使用JSON结构。

文件名的修改可以在文件系统中修改,也可以在Web界面右键进行修改
当你正在使用Python编译器,需要用到命令行工具的时候,麻烦的事情就出现了:要在shell和IDLE之间进行切换。
但是,如果你用的是Jupyter,就完全不用这么麻烦,你可以直接在命令之前加一个!,就能执行shell命令,完全不用来回切换,就能在Jupyter中执行任何命令。
下面是在windows系统中,使用命令dir查看当前目前的文件内容

比如我们需要使用pip安装包的时候,便可以直接在JupyterLab的某个文档的单元中运行!pip install xxxx即可。
快捷键可以干嘛,它不仅可以大大提高开发效率,还可以用来装X,正所谓一顿操作猛如虎。
不管你是奔着什么目的,都有必要掌握常用的快捷方式,下面按不同的模式列出了基本的快捷方式,并在自己经常使用的快捷方式前加*注明。
*Shift-Enter : 运行本单元,选中下个单元
*Ctrl-Enter : 运行本单元
*Alt-Enter : 运行本单元,在其下插入新单元
*Ctrl-S: 保存并检查
*Enter: 进入编辑模式
*Y : 单元格转入代码状态
*M : 单元格转入markdown状态
R : 单元格转入raw状态
1 : 设定 1 级标题
2 : 设定 2 级标题
3 : 设定 3 级标题
4 : 设定 4 级标题
5 : 设定 5 级标题
6 : 设定 6 级标题
*A: 在上面插入单元格
*B: 在下面插入单元格
*X: 剪切选择的单元格
*C: 复制选择的单元格
*V: 粘贴到下面
*Z: 撤销单元格操作
*D,D: 删除选中单元格
K: 选择上面的单元格
↑: 选择上面的单元格
↓: 选择下面的单元格
J: 选择下面的单元格
Shift-K: 扩展上面选择的单元格
Shift-↑: 扩展上面选择的单元格
Shift-↓: 扩展下面选择的单元格
Shift-J: 扩展下面选择的单元格
Ctrl-A: 选择所有的单元格
*Shift-M: 合并选中单元格, 如果只有一个单元格被选中,合并下方的单元格
S: 保存并检查
I,I: 中断服务
0,0: 重启服务(带窗口)
Shift-L: 在所有单元格中切换行号,并保持设置
*Shift-空格: 向上滚动
*空格: 向下滚动
Ctrl+Shift+[: 向左切换文档
Ctrl+Shift+]:向右切换文档
Ctrl-M: 进入命令行模式
*Esc: 进入命令行模式
*Tab : 代码补全或缩进
*Shift-Tab : 提示或解除缩进
Ctrl-] : 缩进
Ctrl-[ : 解除缩进
Ctrl-A : 全选
*Ctrl-Z : 撤销
*Ctrl-Shift-Z : 重做
Ctrl-Y : 重做
Ctrl-Home : 跳到单元开头
Ctrl-End : 跳到单元末尾
Ctrl-Left : 跳到单词左边
Ctrl-Right : 跳到单词右边
Ctrl-Backspace: 删除前面的单词
Ctrl-Delete: 删除后面的单词
*Ctrl-Shift-- : 分割单元
*Ctrl-/: 注释或解除注释
*Ctrl-D: 删除整行
Ctrl-U: 撤销选择
Alt-U: 重新选择
Insert: 切换重写标志
↓: 光标下移
↑: 光标上移

并且都以%符号作为前缀
IPython魔法命令设计用于简洁地解决标准数据分析中的各种常见问题。魔法命令有两种形式:
%magic: 输出所有魔法指令帮助文档
%lsmagic:列出所有magics命令
%quickref:输出所有魔法指令的简单版帮助文档
%MagicName?:输出某个魔法命令详细帮助文档
查看魔法命令简单版的帮助文档

查看time魔法命令的使用帮助文档

这里只列出一些常用的行魔法命令:
%automagic:如果automagic被打开,魔法命令可以省略前面的% 符号
%run:执行脚本
%run test.py

%time:计算接下来一行的Python语句的执行时间
%timeit:计算接下来一行的Python语句多次执行后的平均时间
%timeit L = [n ** 2 for n in range(100000)]

%history:获取此前所有的输入历史
%xmode:设置异常模式,即当代码有异常时,出错信息的输出方式,可以设置Plain、Context、Verbose和Minimal四种模式
%pip:在cell中使用pip指令
shell相关魔法命令
%cd、%cat、%cp、%env、%ls、%man、%mkdir、%more、%mv、%pwd、%rm、%rmdir、…
注意:魔法方法提供了部分shell命令的功能,另外,我们也可以通过
!cmd的方式运行相关shell命令。但要注意它们的区别:
!开一个新的progress,执行完之后立即终止。如果执行的命令是切换目录,则不会对当前进程产生影响。%的操作会持续。如果使用%cd切换目录后,直接影响是当前进程。
%%time:处理多行输入
%%timeit:处理多行输入
%%timeit
L = [n ** 2 for n in range(100000)]
L = [n ** 2 for n in range(100000)]

%%writefile:将当前cell中内容写入文件中%%writefile test.py
print('hello world!')

%%latex:写Latex公式%%latex
\begin{equation}
\int_0^\infty \frac{x^3}{e^x-1}\,dx = \frac{\pi^4}{15}
\label{eq:sample}
\end{equation}

%%script :写bash、perl、javascript、js 等命令Jupyter让很多人喜欢的原因在于它提供了丰富的插件,包括显示代码执行时间、生成目录、显示变量名、代码块折叠等各种让你舒适的功能。
在进行JupyterLab插件安装之前,需要安装node.js 和 npm,可运行如下命令进行安装。
!pip install nodejs npm -i https://pypi.tuna.tsinghua.edu.cn/simple
注意,命令前面加
!是因为在jupyterlab中运行的,如果在终端运行的安装命令,去掉!
进入JupyterLab后,可以在Web上查看已安装组件,搜索安装需要的插件

注意:如果没有出现插件选项卡,可以通过 setting–>Advanced Settings Editor–Extension Manager :在User Overrides 添加语句{“enabled”: true},最后保存,就可以出现插件选项
当然,你也可以使用命令行方式进行插件的查看、安装、更新和删除
查看已安装插件:jupyter labextension list
更新已安装插件:jupyter labextension update --all
安装插件toc:jupyter labextension install @jupyterlab/toc
删除插件toc:jupyter labextension uninstall @jupyterlab/toc
go to definition: 在Lab笔记本和文件编辑器中跳转到变量或函数的定义。
lsp:自动补全、参数建议、函数文档查询、跳转定义等
安装:
pip install jupyterlab_sql
jupyter serverextension enable jupyterlab_sql --py --sys-prefix
jupyter lab build
或者在Web的插件选项中搜索安装
sql: 可以在Lab中连接数据库,并进行sql查询和修改操作
drawio:非常棒的流程图工具
pip install jupyterlab-drawio或者在Web的插件选项中搜索安装
spreadsheet:在Lab上显示excel表格(只读模式)
gather: 在Lab中清理代码,恢复丢失的代码以及比较代码版本的工具
github: 安装后Lab左侧会出现一个github栏按钮,你可以在里面搜索github项目,并且打开项目里面的文件,如果是notebook文件,能够直接运行代码
toc: 方便地在Lab上展示notebook或者markdown的目录
LaTeX:编辑并预览LaTeX文档
HTML: Lab内部呈现HTML文件
plotly(https://github.com/jupyterlab/jupyter-renderers): 展示plotly可视化效果
bokeh: 展示bokeh可视化效果
variableinspector: 在Lab中展示代码中的变量及其属性,类似RStudio中的变量检查器
matplotlib:启用matplotlib可视化交互功能
dash: 展示plotly dash交互式面板
monitor: 系统监视器是用于显示系统信息(内存和 cpu 使用情况)的 JupyterLab 扩展。它用于监视自己的资源使用情况。
如果你有一台云服务器,是不是很想在服务器上配置好环境,在任何地方都可以通过浏览器进行访问使用呢?
考虑到服务器一般使用Linux,这里将以ubuntu为例,介绍如何配置远程访问方式,前提是服务器上已经安装好了JupyterLab。(如果是windows,亦是如此操作):
jupyter lab --generate-config
运行上面的命令后,会生成jupyter的配置文件,比如这里生成的配置文件为:/home/xiaobai/.jupyter/jupyter_notebook_config.py

运行如下代码,并输出访问Jupyter时密码,生成sha1加密密码
from jupyter_server.auth import passwd
passwd()

这里输入的密码是lab123,对应生成的sha1加密密码为:sha1:adbe516d2745:aae3a189602f2078a323c71b413fee063226f7ba
注意:
在旧版本的JupyterLab中,
passwd导入方式改为:from notebook.auth import passwd输入密码时光标不会跳,千万不要以为没输入成功。
在上面命令生成的配置文件末尾添加如下内容,上面的配置文件是
c.ServerApp.ip = '0.0.0.0' #设为0.0.0.1,将绑定所有地址,即所有IP地址都可以访问
c.ServerApp.password = u'sha1:adbe516d2745:aae3a189602f2078a323c71b413fee063226f7ba'
c.ServerApp.open_browser = False #启动后是否在浏览器中自动打开
c.ServerApp.port = 8888 #指定一个访问端口80,默认8888
c.ServerApp.allow_root = False #允许root用户开启
c.ServerApp.notebook_dir = "/home/xiaobai/ipython" #设置工作的文档目录
注意:
在JupyterLab的旧版本中,将c的设置项从
ServerApp改为NotebookAppallow_root: 如果用root 用户启动 jupyter lab时,必须将其设置为True。实际上不建议使用 root 启动,因为这样可能在浏览器端 cmd 窗口直接暴露 root 权限
password: 这里的密码是在第2步骤中生成的sha1加密版的密码。
port: 示例中设置的 8888 端口
- 应该是一个未被占用的端口,如果设置的端口被已经被占用,会依次尝试后面的端口,比如8889。
- 是一个被防火墙允许的端口,如果是阿里云、腾讯云等服务器需要在官网修改安全策略。
notebook_dir:
- 设置的是工作的文档目录,需要自行选择并创建(否则运行时会报错)
mkdir /home/xiaobai/ipython
nohup jupyter lab &

注意:输入的密码是加密之前的密码,比如在第2步中设置的是
lab123,则输入lab123即可。
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po