Jupyter Notebook:在线Python学习笔记

环境

  • Debian9
  • LNMP

介绍

特性:

  • 以网页的形式打开,随时随地访问
  • 在线编写代码
  • 在线运行&Debug代码
  • 随时添加MarkDown文档,用于解释说明

先试用,再安装

如果看了以上对Jupyter Notebook的介绍你还是拿不定主意究竟是否适合你,不要担心,你可以先免安装试用体验一下。戳这里,然后再做决定。

注意:如果提示说No Vacancy,那就是当前服务器爆满了,待会再来看看吧。


安装

安装前提

安装Jupyter Notebook的前提是需要安装了Python。一般而言,linux系统都默认有Python的环境。

使用Anaconda安装

安装Anaconda

前往官方下载页面下载安装包。方法就是复制一下下载链接,然后用wget命令下到服务器上,如:

wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh

下载下来后,我们需要执行:

bash Anaconda3-2019.10-Linux-x86_64.sh

然后按提示安装即可。

当看到“ Thank you for installing Anaconda! ”时,恭喜你,Anaconda已经安装成功了。

安装好后,可以尝试下述命令确认是否安装成功。

conda --version #检查Anaconda版本
condal list #列出所有安装的包
conda update --all #更新所有已安装的包
conda info #Anaconda相关信息

安装Jupyter Notebook

conda install jupyter notebook

配置Jupyter Notebook

jupyter notebook --generate-config

执行这条命令后,会生成一个jupyter_notebook_config.py文件,其中包含各种配置信息。该文件的默认路径为用户home目录/.jupyter/jupyter_notebook_config.py

下面是部分常用配置及其说明:

c.NotebookApp.allow_password_change = False #禁止在网站页面修改密码。
c.NotebookApp.allow_remote_access = True #允许非局域网机器访问。
c.NotebookApp.allow_root = True #允许以root用户运行(不推荐)。
c.NotebookApp.base_url = '/jupyter/' #自定义网页根路径,在设置反向代理的时候有用。
c.NotebookApp.ip = '0.0.0.0' #设置监听地址,0.0.0.0代表任何主机可访问,127.0.0.1代表仅本机可访问。
c.NotebookApp.notebook_dir = '' #笔记所在目录(绝对路径),用于存放笔记并与其他文件区分开来。
c.NotebookApp.open_browser = False #关闭自动打开浏览器,我们的服务建在服务器上,没有图形界面,不需要打开浏览器。
c.NotebookApp.quit_button = False #不显示quit按钮,以免错按导致服务关闭,又要重新登陆服务器开启服务。

当然,你也可以选择不使用配置文件。在启动的时候,在后面添加相应的参数也可以达到相同的效果。但为了使命令更加简洁,后续配置更加方便,这里还是建议使用配置文件。

最后我们还需要添加一个密码,执行:

jupyter notebook password

按提示输入两次密码,就OK了。

在这个过程中,默认会新建一个jupyter_notebook_config.json文件,路径与前面的配置文件一致,内含加密后的密码信息。


使用

jupyter-notebook #启动
ctrl+c #退出

如无意外,你的Jupyter Notebook应该就已经在运行了。

此时你可以通过访问http://服务器ip地址:8888来检查服务是否运行正常,并用你刚刚设置好的密码来登录。

如果无法访问,请检查:

  • 启动服务后是否有错误信息
  • 服务器8888端口是否开启
  • 服务器供应商是否有安全组策略阻止访问

反代

为了使我们的笔记更加安全、且便于访问,我们希望使用域名访问Jupyter Notebook。

为此,就要在Nginx配置文件中添加以下内容:

server {
...
        location ^~ /jupyter/ {
            proxy_pass http://127.0.0.1:8888;
            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;
        }
...
}

配置好以后需要重启一下Nginx,使修改生效。

确认可以访问后就可以将前面的jupyter_notebook_config.py文件中的c.NotebookApp.ip项修改为127.0.0.1,实现禁止通过ip访问。


拓展

nb_conda:在线管理Python包

安装&使用

conda install nb_conda #安装
conda remove nb_conda #卸载
jupyter serverextension disable nb_conda #启用
jupyter serverextension enable nb_conda #禁用

安装完成后,就可以在网页上看到conda标签页。

该页面会显示当前系统存在的Python环境以及已安装的Python包,还可以搜索下载新的包。

可能的报错

进入conda标签页后出现报错

EnvironmentLocationNotFound: Not a conda environment

原因:

新旧版本Anaconda的conda info --json输出不一致:旧版输出envs=[]、新版输出envs=[root_env_dir]。导致nb_conda无法找到环境配置。

解决方法:

编辑anaconda_dir/pkgs/nb_conda-version/lib/python3.x/site-packages/nb_conda/envmanager.py

  • anaconda_dir为Anaconda的根目录
  • version为nb_conda版本
  • 3.x为python版本。

打开文件后,将for env in info['envs']]替换为for env in info['envs'] if env != info['root_prefix']]即可。

jupyter_contrib_nbextensions:笔记拓展插件管理

安装

conda install -c conda-forge jupyter_contrib_nbextensions

使用

安装完成后,页面中应该会出现Nbextentions标签页。勾选想要的插件,刷新页面即可使用。

可能出现的问题

所有的插件均为灰色。

原因:我们下载的是最新版本的Anaconda,很多插件都没有在这个版本环境下测试过,故显示为可能不兼容。但事实上,大部分插件都可以正常运行在新版环境下,大家可以放心使用这些插件。

解决方法:取消勾选最上方的disable configuration for nbextensions without explicit compatibility选项,即可正常启用各个插件。

使用code prettify插件时报错。

Error: ModuleNotFoundError No module named 'yapf'

原因:未安装yapf软件包。

解决方法:

conda install yapf

通过systemd实现自启动

添加service

/etc/systemd/system/目录下添加jupyter.service文件,内容如下:

[Unit]
Description=Jupyter Notebook
[Service]
Type=simple
ExecStart=/root/anaconda3/bin/jupyter-notebook
User=root
Group=root
WorkingDirectory=/root/.jupyter/notebook
Restart=always
RestartSec=10
EnvironmentFile=/root/anaconda3/envs/jupyter-env
[Install]
WantedBy=multi-user.target

其中各项意义如下:

  • ExecStart项内容为Jupyer Notebook可执行文件的绝对路径,可通过在终端执行which jupyter-notebook查询。
  • User和Group代表以哪个用户的身份启动。
  • WorkingDirectory代表在哪个目录下执行这个程序,这会影响网页上Terminal的初始路径。

!!!重点!!!

EnvironmentFile项为启动程序时应有的环境变量,十分重要。

如未添加该项,通过service启动的Jupyter Notebook会出现各种奇奇怪怪的问题,比如说:

#启动时出现:
[nb_conda_kernels] couldn’t call conda:
[Errno 2] No such file or directory: ‘conda’: ‘conda’
[nb_conda_kernels] enabled, 0 kernels found
#conda页面报错,无法使用。
#新建出来的terminal处在无用户&无路径&无虚拟环境的奇怪状态,仅仅显示“#”,而不是正常终端的“(base)user@hostname:path#”。
#无法在notebook内执行常用的bash命令(如ls等),报如下错误:
OSError: "sh" shell not found

配置方法

在终端中执行export命令得到当前系统的环境变量,然后全部复制下来。

在任意路径下新建一个文件,名称随意。这里我们选择的是/root/anaconda3/envs/jupyter-env

然后将刚刚复制下来的环境变量填到里面。

最后在service文件中添加EnvironmentFile项,对应刚刚新建的文件。

管理服务

systemctl start jupyter.service #启动
systemctl stop jupyter.service #停止
systemctl status jupyter.service #状态,可查看是否成功运行
systemctl restart jupyter.service #重启
systemctl enable jupyter.service #开机自启
systemctl disable jupyter.service #关闭开机自启
systemctl systemctl daemon-reload #重载守护进程,更改service文件后需要执行。

至此,安装配置Jupyter Notebook的工作已大致完成,享受在线学习Python的乐趣吧。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据