ipython与jupyter_notebook安装配置使用

[TOC]

ipython安装配置使用

配置

生成配置文件

若ipython的配置文件~/.ipython/profile_default/{ipython_config.py,ipython_kernel_config.py}不存在,则执行如下命令以创建之

ipython profile create

会返回

[ProfileCreate] Generating default config file: ‘~/.ipython/profile_default/ipython_config.py’
[ProfileCreate] Generating default config file: ‘~/.ipython/profile_default/ipython_kernel_config.py’

终端下ipython的配色

参考

更换配色方案

默认的终端下ipython配色,__class__等显示为深蓝色,当你的终端背景是深色时容易,深蓝字难看清,建议修改配色方案。在~/.ipython/profile_default/ipython_config.py,找到如下两行,删除其行首”#“,并将等号后修改为

c.InteractiveShell.colors = 'Linux'
c.TerminalInteractiveShell.highlighting_style = 'monokai'
  • c.InteractiveShell.colors是指在ipython报错用的配色

  • c.TerminalInteractiveShell.highlighting_style是指python代码的配色。配色方案在定义在

    /Users/mac/anaconda/lib/python3.6/site-packages/pygments/styles/<配色方案名称>.py

    这里, <配色方案名称monokai,是我找到styles/下较友好的配色了。

手动修改高亮

若对所选配色方案还有不满意的地方,可以手动修改指定语法成分的高亮

搜索c.TerminalInteractiveShell.highlighting_style_overrides,然后如下改写

from pygments.token import Token, Keyword, Name, Comment, String, Error, \
     Number, Operator, Generic, Whitespace
## Override highlighting format for specific tokens
c.TerminalInteractiveShell.highlighting_style_overrides = {

    ## Standard Pygments tokens (are all used by IPython ?)

    # Whitespace:                "#bbbbbb",
    # Comment:                   "italic #008800",
    # Comment.Preproc:           "noitalic",
    # Comment.Special:           "noitalic bold",

    Keyword:                     "bold #5fd4f9", #  8ce98c
    # Keyword.Pseudo:            "nobold",
    # Keyword.Type:              "bold #00BB00",

    # Operator:                  "#ff736f",   #
    # Operator.Word:             "bold #AA22FF",

    Name.Builtin:                "#5fd4f9",
    # Name.Function:             "#99f46a", #
    # Name.Class:                "#99f46a", #
    # Name.Namespace:            "bold #99f46a", #
    # Name.Exception:            "italic bold #89f9fc",
    Name.Variable:               "italic", #
    # Name.Constant:             "#880000",
    # Name.Label:                "#A0A000",
    # Name.Entity:               "bold #999999",
    # Name.Attribute:            "#BB4444",
    # Name.Tag:                  "bold #008000",
    # Name.Decorator:            "#AA22FF",


    # String:                    "#f7f86c",
    # String.Doc:                "italic",
    # String.Interpol:           "bold #BB6688",
    # String.Escape:             "bold #BB6622",
    # String.Regex:              "#BB6688",
    # String.Symbol:             "#71f3f6", #
    # String.Other:              "#008000",
    # Number:                    "#cf97f2", #

    # Generic.Heading:           "bold #000080",
    # Generic.Subheading:        "bold #800080",
    # Generic.Deleted:           "#A00000",
    # Generic.Inserted:          "#5affb4", #
    # Generic.Error:             "#FF0000",
    # Generic.Emph:              "italic",
    # Generic.Strong:            "bold",
    # Generic.Prompt:            "bold #000080",
    # Generic.Output:            "#888",
    # Generic.Traceback:         "#04D",

    # Error:                     "border:#ff0000",

    ## IPython

    # Token.Number: '#ffffff',
    # Token.Operator: 'noinherit',
    # Token.String: '#8b8',
    # Token.Name.Function: '#2080D0',
    # Token.Name.Class: 'bold #2080D0',
    # Token.Name.Namespace: 'bold #2080D0',
    # Token.Prompt: '#ffffff bold',
    # Token.PromptNum: '#888888 bold',
    Token.OutPrompt: '#ff5753',
    Token.OutPromptNum: '#ff5753 bold',
}

jupyter notebook 安装配置使用

参考

已经验证此配置方法可用的环境:实验室服务器juncluster、jungpu

配置方法

ssh登录服务器

安装

进入python虚拟环境

source bin/activate

检查是否安装jupyter

jupyter

如返回未安装,则安装之

pip install jupyter

已安装则升级之

pip install -U jupyter

配置

生成配置文件

jupyter notebook --generate-config
# 返回 Writing default config to: ~/.jupyter/jupyter_notebook_config.py

会自动创建文件夹~/.jupyter与配置文件~/.jupyter/jupyter_notebook_config.py

命令行会返回此【配置文件路径】,请保存

生成网络证书

cd ~/.jupyter
# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 3650 -out mycert.pem

回车系统会要求你填写:国家、省份、城市、单位、项目、邮箱,按真实填写之即可。
保存【证书路径】=~/.jupyter/mycert.pem,【密钥路径】=~/.jupyter/key.pem

生成notebook登录密码

若想给notebook设置登录密码,则做此事。可以在任何电脑上做,生成的密文是一样的

ipython
In [1]: from notebook.auth import passwd
In [2]: passwd() #  创建一个密文的密码
Enter password: # 在此处设置notebook的【登录密码】
Verify password: # 重复密码
Out[2]: 'sha1:adsasdasd:34da7adasdas87d0as8d70asda8sdaasd076f018' # 会生成一个形如它的【哈希密码】

将登录密码与哈希密码保存

更改配置文件

vim /home/$USER/.jupyter/jupyter_notebook_config.py
  • 通用配置

    进入文件后

    # 加在文件开头
    import os
    #【证书新路径】
    c.NotebookApp.certfile = os.path.expanduser(u'~/.jupyter/mycert.pem')
    #【密钥路径】
    c.NotebookApp.keyfile = os.path.expanduser(u'~/.jupyter/key.pem')
    # NotebookApp的ip,'0.0.0.0'莫写成"*"。
    # 写成"*"有时会报错”socket.gaierror: [Errno -5] No address associated with hostname“
    c.NotebookApp.ip = '0.0.0.0'
    # 使得服务器上输入'jupyter notebook'命令后,不会立即进入它的浏览器
    c.NotebookApp.open_browser = False
    # 在浏览器访问notebook,要在浏览器中输入密码,才能登陆
    c.NotebookApp.password = u'【哈希密码】'
    # 将该【服务器端口】保存,使用固定端口号,可以随便设置,建议用不常见的,以免与其他任务的端口号冲突
    #  注:若别的任务先占用了该端口,输入'jupyter notebook'命令,则会自动用该端口+1,再不行+2,以此类推
    c.NotebookApp.port = 11328
  • ipython notebook的配置

    老的版本的ipython,使用的是ipython notebook;新版本的ipython,已将notebook给了jupyter,故使用的是jupyter notebook

    ipython notebook则还需要更

    c = get_config()
    c.IPKernelApp.pylab = 'inline'  # if you want plotting support always

    jupyter notebook替代“c.IPKernelApp.pylab = ‘inline’”的配置如下,这是默认设置,不用更改

    # DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.
    # c.NotebookApp.pylab = 'disabled'
  • 取消jupyter notebook密码

    这样访问notebook就可以不需要密码

    # c.NotebookApp.token = '<generated>'

    改为

    c.NotebookApp.token = ''

使用

启动notebook

  • 转接

    服务器若设了防火墙,浏览器无法直接访问服务器的notebook【服务器端口】,只能经ssh转接

    ssh 【服务器】 -L127.0.0.1:11327:127.0.0.1:11328

    注:

    '-L127.0.0.1:【代理端口】:127.0.0.1:【服务器端口】'
    # 用户端的localhost:【代理端口】 转接到 服务器端的localhost:【服务器端口】

    登录服务器后,这个转接终端不要关,直到不用notebook

  • 进入虚拟环境

    若jupyter装在virtualenv里,才需要这一步

    source bin/activate
  • 启动notebook

    jupyter notebook

访问notebook

在本地电脑,使用浏览器访问https://localhost:【代理端口】

  • 必须是https,jupyter不支持http

  • 浏览器的选择

    支持:qq浏览器/chrome浏览器/firefox浏览器
    不支持:safari(可以登陆notebook的文件管理界面;但.ipynb文件的编辑界面下,无法连接到服务器的python内核)

  • 浏览器警告"访问不安全"

    参考

    • chrome: 高级>>继续前往(不安全),即可访问,但即使此证书到钥匙串,chrome每次访问依旧警告
    • safari:详细信息>>访问此网站>>接下来跟着提示步骤操作,会提示“以添加此证书到钥匙串”,之后用safari查看此网页,都不再警告
    • firefox:高级>>添加例外>>勾选永远添加此例外>>确认安全例外,之后firefox查看此网页,都不再警告

    相关技术

    手动添加网页的证书

    • 导出证书:firefox访问此网页,显示访问不安全,点高级>>添加例外>>确认安全例外>>证书状态-查看>>详细详细>>导出,导出到随便什么地方
    • 打开 钥匙串访问.app,左栏分别选 登录+证书
      • 若之前用safari信任了此证书,则可见你条件的证书
      • 若没,则将导出的证书拖到这里,然后双击此证书,再点”信任“,全调整为“总是信任”,然后之前导出的证书可以删了
  • 弹出jupyter页面,要求输入【登录密码】

    只有服务器上notebook程序重启,再次登录该网页,才需要再输入密码。
    服务器上notebook程序未关,本地即便断网重连,过数天重连,同一个浏览器不用再次输入密码。

脚本打开

上述启动、访问操作可以用shell或Python脚本打开实现

保持开启状态

使用tmux

推荐此法,用tmux保持转接进程和jupyter notebook一直开启

  • 本机开个tmux session,用来ssh -L转接
  • 服务器上开个tmux session,用来开jupyter notebook

普通方法

  • 暂停jupyter notebook
    服务器上按ctrl+z,会出现

    [1]+  Stopped                 jupyter notebook

    表示jupyter notebook暂停,本地浏览器上无法访问Notebook网页

  • 放入后台运行

    服务器上输入

    bg

    会出现

    [1]+ jupyter notebook &

    表示jupyter notebook变成后台运行。

  • 查看进程

    jobs

    若返回有

    [1]+  Running                 jupyter notebook &

    则为jupyter notebook在后台运行

  • 退出登录

    ctrl+Q/W 退出服务器的登录,则jupyter notebook立即停止

    exitlogout退出服务器的登录,则jupyter notebook不会立即停止