JupyterNotebook

Jupyter Notebook 踩坑

欢迎访问bardreamaster.xyz查看原文

文章列出了Jupyter Notebook在Windows和Linux平台上使用时遇到的诸多Bug以及解决方案,同时阐述了通用的使用方法和配置方式,为了解决实际使用需要,介绍了如何导出PDF,如何在服务器上部署JupyterNotebook以及如何配置SSL加密和HTTPS访问等各类情形。文中提及的方法均经测试并成功,供记录学习之用。

各类软件的安装在其官方网站都已详细列出操作步骤,此处仅提及或提示易出错处水字数,各软件的Document会在注释中给出。

Jupyter在各平台使用anaconda辅助安装,也可以采用其它方式安装,配置方式相似,不做赘述。对于使用过程中产生的各类Bug,请认真查看报错信息,请勿盲目按照网络搜索结果进行操作。

在安装各种软件前,请确认你是否为首次为你的设备安装某款软件,反复的卸载安装需要正规的卸载和安装流程,以确保环境正常,避免旧的环境残留影响新的安装效果。已安装的支持请勿反复安装。对于部分情形的处理方式后文也将提及。

其中,Windows环境下进行了一些操作,以便导出PDF via LAtex。Linux环境下可以进行相似操作,但是需要进行更多的配置,笔者并未在Linux下配置此项。关于无法导出PDF的替代方案也将在后文中有所提及。

后续的相关操作需要读者具有非常简单的技术基础,请确保在执行各项命令之前你已充分了解操作的正确执行方式、效果和如何恢复,并且对关键文件进行备份。

Windows环境下的安装和配置

Anaconda

  • 首先在其官方网站下载需要的安装包,一般使用最新版64位。下载完成后启动安装程序,按照提示进行选择。请注意:

    • 安装路径中一定不能出现中文(Install Anaconda to a directory path that does not contain spaces or unicode characters.)。

    • 推荐不要将环境变量加入PATH,在后续的使用中可以通过Navigator的图形界面或者在开始菜单中使用Anaconda Prompt打开命令行界面。不添加PATH 时,conda等相关命令是不能直接在cmd或者Power Shell中直接使用的,此举是为了系统安全性考虑。如果有需要可以勾选将环境变量加入PATH,同时,如果后续有需要,也可以手动添加环境变量。

    • 手动添加环境变量:右键我的电脑>>高级系统设置>>环境变量>>系统环境变量PATH>>添加,加入三条新的记录,

      • J:\anaconda(安装目录),

      • J:\anaconda\Scripts(脚本目录),

      • J:\anaconda\Library\bin(库文件目录)。

  • 验证安装:可以启动Navigator并查看到base环境。或者可以打开Anaconda Prompt并且无报错信息,可以运行conda list即可。

Jupyter

安装Anaconda成功之后,在Anaconda Prompt中运行jupyter notebook即可在浏览器中看到本地8888端口打开了notebook的界面,如果没有自动打开浏览器,只需要在浏览器地址栏输入命令行返回的地址或者loaclhost:8888即可进入notebook.

以下为一些可能的Bug及解决方案:

  • kernel启动错误,提示找不到kernel。

    使用jupyter kernelspec list命令可以查看当前存在的kernel,请检查命令返回的available kernels中提示的文件夹下kernel.json配置文件中的内容(如下所示),请检查argv中提示的python.exe文件是否正确存在,如不存在,请更改为使用Anaconda安装目录下的python.exe文件,如果是其他环境下的python,一般存放在Anaconda安装目录中envs目录下,指定好正确的python解释器即可,display_name可以更改其显示的名称。

{
 "argv": [
  "J:\\Anaconda\\python.exe",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3",
 "language": "python"
}
  • kernel启动错误,提示文件subprocess.py文件中的函数执行出错,或找不到文件。

    进入报错的文件目录下,也就是安装目录中的\lib文件夹,打开其中的subprocess文件,找到subprocess.Popen函数,将其中的参数shell值更改为True。

  • 如果在配置过程中出现无法打开cmd的情况,请检查注册表中是否存在异常项:

    win+R运行regedit,在其中寻找HKEY_CURRENT_USER>>Software>>Microsoft>>Command Processor,检查其中是否存在某项的值为EXIT,如存在,将其删去即可。下图为正常状态:

  • 创建新的虚拟环境

    1. 首先安装ipykernel:conda install ipykernel

    2. 在虚拟环境下创建kernel文件:conda install -n 环境名称 ipykernel

    3. 激活conda环境:source activate 环境名称

    4. 将环境写入notebook的kernel中:

      python -m ipykernel install --user --name 环境名称 --display-name "你想为kernel添加的名称"
      
    5. 删除已安装的环境jupyter kernelspec remove kernelname

为了能够正常导出PDF via latex,或者在导出过程中产生了报错信息,则需要满足如下条件或进行如下操作:

  • Texlive已安装成功,并且其安装目录已被添加至环境变量PATH中。

  • 正在编辑的notebook文件路径不能包含中文字符。

  • 如果提示Inkscape、nbconvert等文件缺失、找不到路径,只需要安装相应的软件或包即可,如果是python包直接用conda install或者pip install安装即可,如果是其他软件进入其官网下载安装即可。提示找不到路径不是软件未安装,就是安装目录未添加至环境变量。

  • 需要渲染的文件中不能存在Latex语法错误,可以正常浏览并不意味着不存在编译错误,请仔细查看报错信息,寻找关键词error,仔细查看其报错内容,进行修改,多为格式错误或html格式与公式等其他公式冲突。

  • 在Anaconda安装目录下寻找Lib\site-packages\nbconvert\exporters\pdf.py此文件,将文件中同下第一行一致的内容更改为后者。(也就是去除build_directory:后方引号中间的点)

    #writer = Instance("nbconvert.writers.FilesWriter", args=(), kw={'build_directory': '.'})
    writer = Instance("nbconvert.writers.FilesWriter", args=(), kw={'build_directory': ''})
    
  • 如果各种方案均无法解决导出问题,可以先将notebook导出未md或者html再转为PDF,其中html的效果更好,支持的标记语法更多,而且网页预览更为方便,md文件需要你有Typora之类的markdown编辑器。

Texlive

Texlive的安装是为了后续Notebook导出PDF文件,如果没有需求可以忽略此步,除了Texlive也可以使用MikTex等编译器,读者可视情况选择。

  • 官方网站下载Windows对应的安装程序,或者通过国内镜像站直接下载.iso文件。官方下载的.exe文件实质是一个文件下载器,它会帮助用户从服务器上下载相关文件并进行安装,但是由于某些原因,导致其访问速度可能过慢,需要保持电脑有比较稳定的网络环境,安装时长时情况需要20分钟至若干小时不等,请勿在安装过程中强制终止安装。如果直接下载完整的.iso文件,运行其中的install-tl-windows.bat文件即可安装至本地。
  • 同样注意安装路径中不应包含中文和空格。
  • 官方中文指南

Linux环境下安装与配置

Anaconda

按照官方手册下载、安装并添加好环境变量进行初始化即可。

Jupyter[ref id=“Jupyter Document”]https://jupyter-notebook.readthedocs.io/en/latest/notebook.html Jupyter Document [/ref]

  • 运行jupyter notebook --generate-config,会在~/.jupyter文件夹下生成jupyter_notebook_config.py文件,用来配置相关参数。

  • 需要配置的参数如下。其中,ip表明允许访问的IP,*表明任意IP都可以访问;port指明服务打开的端口,默认为8888,有需要可以修改。open_browserFalse表明启动服务时不会自动在浏览器打开,因为在服务器上,我们需要远端访问,所以不需要自动在服务器的浏览器打开;password为设定的密码的加密值;notebook_dir是工作空间的根文件夹,也就是进入notebook后只可以编辑这个文件夹下的文件;certfilekeyfile分别是SSL加密的证书和密钥文件路径。

    c.NotebookApp.ip='*'
    c.NotebookApp.port=443
    c.NotebookApp.open_browser=False
    c.NotebookApp.password='argon2:$argon2id$v=19$m=10240,t=10,p=8$fbPtLGGSL8CyBmN9/EaUbw$nGFC5VR+JGK/jDI8gJamAQ'
    c.NotebookApp.notebook_dir='/root/me338'
    c.NotebookApp.certfile = u'/root/5248883_jupyter.bardreamaster.xyz.pem'
    c.NotebookApp.keyfile = u'/root/bard.pem'
    
  • 生成密码,可以直接运行jupyter notebook password填写并自动配置密码,也可以手动进行密码设置,输入python进入输入状态,进行如下操作,可以得到类似的Out,将输出的内容全部复制下来,写入jupyter_notebook_config.py文件。

    In [1]: from notebook.auth import passwd
    In [2]: passwd()
    Enter password:
    Verify password:
    Out[2]: 'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'
    
    c.NotebookApp.password = u'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'
    
  • 为了部署在服务器上,需要设定好访问端口,如果没有特殊需求,保持默认或随意选择一个端口即可,访问时通过公网IP:端口号即可访问,例如xxx.xxx.xxx.xxx:8888

  • 如果服务器上没有运行其他的Web服务,想要通过域名直接访问,需要将端口更改至80,将域名解析至服务器的公网IP,通过HTTP访问域名时会自动访问到80端口上的Jupyter服务。若访问失败请检查服务器的80端口是否被其它服务占据,部分Linux系统会默认在80端口上运行httpd服务,需要先解除占用,再启动Jupyter。

    如果服务器上运行了其他的Web服务,访问时可以通过域名+端口号访问,如果希望二级域名直接访问到Jupyter服务,需要对二级域名的解析做转发,此操作依赖其他服务进行。

  • 访问时,Jupyter给出了开启SSL加密访问的方案,首先要注意的是,开启SSL加密之后,应当只使用HTTPS访问。开启SSL加密需要有证书和密钥文件,官方给出的解决方案可以使用openssl自签发的证书,以加密访问,但是自签发的证书只有加密作用,并不能使得浏览器的安全认证正常,也就是浏览器依旧会提示此页面不安全。

    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem   #使用openssl生成有效期为365天的证书,密钥和证书分别储存为mykey.key和mycert.pem
    jupyter notebook --certfile=mycert.pem --keyfile mykey.key #设定证书和密钥文件
    

    同时,也可以采用Let’s Encrypt签发的免费通配符证书。除此之外,如果有国内其他运营商的证书也可以使用。以阿里云为例,申请到证书之后,下载Nginx证书,在配置文件中配置好路径即可。

    证书配置完成之后,如果服务器上没有其他Web服务,需要将Jupyter的服务配置在443端口上,以便HTTPS直接访问到。在其他端口需要配置转发,方式请自行搜索。

欢迎访问bardreamaster.xyz查看原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值