目录
环境
- 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)[email protected]: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的乐趣吧。