Jupyter Notebook(前身是IPython Notebook)是一个基于Web的交互式计算环境,用于创建Jupyter Notebook文档。Notebook一词可以通俗地引用许多不同的实体,主要是Jupyter Web应用程序、Jupyter Python Web服务器或Jupyter文档格式(取决于上下文)。Jupyter Notebook文档是一个JSON文档,遵循版本化模式,包含一个有序的输入/输出单元格列表,这些单元格可以包含代码、文本(使用Markdown语言)、数学、图表和富媒体,通常以“.ipynb”结尾扩展。

启动

1
jupyter notebook --allow-root --ip 0.0.0.0 --port 9999

默认不允许/不建议root启动jupyter,如果非要用,加上–allow-root
–ip ip填写0.0.0.0 或者本机ip
–port 端口号

启动后,浏览器访问对应ip和端口就行,需要输入token,token在启动界面有输出

生产配置文件

每次记住token,复制再登录不现实

1
jupyter notebook --generate-config

生成的配置文件位于

1
~/.jupyter/jupyter_notebook_config.py
1
jupyter-notebook password

输入两遍密码

启动,就可以 以固定密码登录了

1
jupyter notebook --allow-root --ip 0.0.0.0 --port 999

设置浏览器打开jupyter默认路径

1
vim ~/.jupyter/jupyter_notebook_config.py

填写自己想要的服务器路径

1
c.NotebookApp.notebook_dir='/'

设置jupyter开机启动

systemctl脚本目录:/usr/lib/systemd/
系统服务目录:/usr/lib/systemd/system/
用户服务目录:/usr/lib/systemd/system/


1
cd /usr/lib/systemd/system/
1
vim myjupyter.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[UNIT]

#服务描述
Description=python jupyter Service

#指定了在systemd在执行完那些target之后再启动该服务
After=network.target


[Service]

#定义Service的运行类型,一般是forking(后台运行)
#Type=forking 这个会卡住啊,不写Type 或者 如下
Type=simple


#定义systemctl start|stop|reload *.service 的执行方法(具体命令需要写绝对路径)
#注:ExecStartPre为启动前执行的命令
# ExecStartPre=/usr/bin/test "x${NETWORKMANAGER}" = xyes
ExecStart=/root/anaconda3/bin/jupyter notebook --allow-root --ip 0.0.0.0 --port 9999
#ExecReload=
# ExecStop=/home/mobileoa/apps/shMediaManager.sh -stop

#创建私有的内存临时空间
PrivateTmp=True


[Install]

#多用户
WantedBy=multi-user.target

1
vi /root/.jupyter/jupyter_notebook_config.py
1
2
3
4
5
6
7
8
# Set ip to '*' to bind on all interfaces (ips) for the public server
c.NotebookApp.ip = '*'
# It is a good idea to set a known, fixed port for server accessy
c.NotebookApp.port = 9999
# 是否打开浏览器
c.NotebookApp.open_browser = False
#设置工作路径
c.NotebookApp.notebook_dir = '/'

重载系统服务

1
systemctl daemon-reload

设置开机启动

1
systemctl enable myjupyter.service

启动服务

1
systemctl start myjupyter.service

停止服务

1
systemctl stop myjupyter.service

重启服务

1
systemctl restart myjupyter.service

Notebook支持虚拟运行环境

为了让Jupyter Notebook支持虚拟运行环境,需要在Anaconda里安装一个插件。
回到终端下面,用C-c退出目前正在运行的Jupyter Notebook Server,然后执行:

1
conda install nb_conda

再重新开启

1
Jupyter Notebook

或者(better)

安装 ipykernel

首先切换到想要在 jupyter notebook 里使用的虚拟环境:

1
conda activate 环境名称

安装 ipykernel:

1
conda install ipykernel

写入 jupyter 的 kernel

在当前虚拟环境里执行:

1
python -m ipykernel install --user --name 环境名称 --display-name "Python (环境名称)"

“环境名称”为当前虚拟环境的名称,最后面引号内的字符串是该虚拟环境显示在 jupyter notebook 界面的名字,可以随意修改。

删除 kernel 环境

上面写入 kernel 的配置并不会随虚拟环境的删除而删除。也就是说即使删除了该虚拟环境,jupyter notebook 的界面上仍会有它的选项,只是无法正常使用。

此时就需要去手动删除 kernel 环境了:

1
jupyter kernelspec remove 环境名称

jupyter中用notedown插件来读取md文档

1
pip install https://github.com/mli/notedown/tarball/master
1
vi /root/.jupyter/jupyter_notebook_config.py
1
c.NotebookApp.contents_manager_class = 'notedown.NotedownContentsManager'

Jupyter Notebook 自定义主题

安装好了Jupyter Notebook和Python之后,我们就已经搭建好啦运行和笔记环境,可以愉快的开始学习了。

于是本着爱折腾的精神和护眼的需求,我搜索了Jupyter Notebook的themes,也就是自定义主题。果然Github上有人一早解决了这个问题。

github

1
2
3
4
5
# install jupyterthemes
pip install jupyterthemes

# upgrade to latest version
pip install --upgrade jupyterthemes

这时候,你就可以在terminal里面调用已经安装好的themes啦~

例如,在terminal中输入

1
jt -l

就会返回所有你安装好的主题的名词列表,这样你就知道了你安装了哪些主题。
最终,我的选择是

1
jt -t chesterish -T -N

表示我选择了chesterish这个主题,同时希望打开顶部的工具栏(Toolbar),显示笔记本的名字(Name)

Jupyter 扩展配置器( Jupyter NbExtensions Configurator)

可以通过 coda 安装:

1
2
conda install -c conda-forge jupyter_contrib_nbextensions
conda install -c conda-forge jupyter_nbextensions_configurator

也可以使用 pip 安装

1
2
3
4
pip install jupyter_nbextensions_configurator
jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
jupyter nbextensions_configurator enable --user
  • 1.标题折叠 Collapsible headings

    当你在处理一个大型的 notebooks 时,这项扩展非常有用,它可以让你隐藏部分内容。

    1. 通知 Notify
      当你长时间运行一个任务程序的时候,程序运行结束后,此扩展功能会自动提醒你。

      如需使用此扩展,你需要勾选其对应得选择框,并点击 Notify 按钮来选择一个最短通知时间,即 notebook 最少持续运行多久后进行提醒。(需要注意的是,这个扩展只有在 notebook 被浏览器正常打开的情况下才能正常工作。)

    1. 代码折叠

    Code folding

    1. 进度条

    tqdm_notebook

    tqdm 本质上不是一个 notebook 的扩展,它是 Python 中的一个进度条库。 但是此库有时在 jupyter notebooks 会无法正常工作。 Randy Olson 给出一个小小的提醒:

    tqdm 是一个 Python 的进度条库,在 jupyter notebook 中则被称之为 “tqdm_notebook”。自从在 nootbook 中加入了 tqdm_notebook 扩展功能,你再也不用担心其引发的混乱问题了。 (Randy Olson 2018 年 3 月 2 日)

    1. %debug这个本质上也不是 notebook 的一个扩展,而是 IPython 中的一个魔法命令。为了加深你的理解,建议你读一读 Radek Osmulski 的发布 twitter 上的推文。

      %debug 魔法命令

        1. 得到了一个异常
        1. 重新插入一个新的输入框,输入 %debug,然后运行它
          交互式的调试方法可以打开并显示代码出现异常的语句,方便你联系前后程序查看具体情况。
          (Radek 2017年12月26日)
    1. 其他小的拓展与技巧

%Ismagic :在输入框中运行这个命令,列出所有可用的 IPython 魔法命令

zen mode 扩展: 隐藏菜单栏,让你更专注于代码

Execute time 扩展:显示程序块运行的时间

autoreload:在不重启 notebook 的情况下,自动载入外部文件,从而修改代码,具体操作如下:

%load_ext autoreload

%autoreload 2

JUPYTER 服务的 NGINX 配置

jupyter 配置

配置文件在

1
/home/{user}/.jupyter/jupyter_notebook_config.py

配置 jupyter 的路径

1
c.NotebookApp.base_url = '/jupyter/'

nginx 配置

jupyter 使用了 websocket 协议,所以需要配置支持 websocket。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
location /jupyter/ {
proxy_pass http://jupyter;
proxy_set_header Host $host;
proxy_set_header X-Real-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

proxy_read_timeout 120s;
proxy_next_upstream error;
}

jupyter notebook 用到了 websocket, 所以需要配置

1
2
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

评论