变ipynb为服务 - 不需要用户安装环境

这几天围绕着 Jupyter NoteBook的使用浏览和尝试了很多,比如如何使用Jupyter Notebook 完成交互式代码展示(记录:筛选写书工具的艰苦经历),使用Jupyter Book 写Web书(自己制作本地的Jupyter Book),甚至涉猎了与R相关的技巧(使用R BookDown 来写书 - PDF, EPUB和Web版。还是算了吧!Jupyter Book 支持 R:做的还不够呀)等。

到今天,算是对如何使用 Jupyter Notebook 构建算法交互展示有了了解。不过,制作了ipynb文件,总不能奢望读者都有足够的运行环境(Python, Juoyter Notebook甚至是很多必要的包),所以,如何变ipynb为服务,让读者不需要安装那些环境就能交互,自然是好的。据此,找了几篇网文实践了下,记录于此。

补充下Jupyter 的好

  • Jupyter支持超过40种语言, 其中包括Python, R, Julia和Scala。
  • Jupyter的编程环境很不错: 你可以写一段图文并茂的说明(Markdown), 再写一段代码(Python, R等), 然后单独运行刚刚写过的这一段代码, 看到结果, 调试代码, 改好以后再进行下一段
  • 如果一个程序要间断好多天才能写完, 那么这种方式能够帮你迅速找到前几天的思路,显然利于继续完成之前的作品
  • Jupyter 的安装,比较好的搭配就是使用Anaconda 来完成
  • 可以将制作的ipynb文件存放到Github上供大家分享(Github上有很多)

但是,想要让读者愉快地阅读和执行ipynb中的代码,奢求他们都能熟练地安装那些环境,还是有些不方便。如果能够像使用WWW技术访问网站一样,只要有浏览器就可以访问那些ipynb并执行其中的代码,自是值得追求一下。好在,80%的情况下,你的需求也是被人的需求,很大可能也已经解决了的。

几个支持Web 访问和执行ipynb 代码的网站

JupyterHub + BinderHub

两个都是Jupyter 旗下的子项目。

With JupyterHub you can create a multi-user Hub which spawns, manages, and proxies multiple instances of the single-user Jupyter notebook server.

BinderHub allows you to BUILD and REGISTER a Docker image from a Git repository, then CONNECT with JupyterHub, allowing you to create a public IP address that allows users to interact with the code and environment within a live JupyterHub instance. You can select a specific branch name, commit, or tag to serve.

BinderHub ties together:

  • JupyterHub to provide a scalable system for authenticating users and spawning single user Jupyter Notebook servers, and
  • Repo2Docker which generates a Docker image using a Git repository hosted online.

BinderHub is built with Python, kubernetes, tornado, npm, webpack, and sphinx.

Cocalc

Cocalc 是一个科学计算平台, 除了提供Jupyter, 还提供了sagemath(也是一个强大的数学计算工具, 可以当作一个开源的mathematica, 随手解个方程, 求个微分之列都很方便)。

CoCalc已经安装好了大量的python包, 比如numpy, tensorflow, keras, pytorch…

Cocalc有免费版和付费版。 免费版没有额外的网络连接, 也就是说你无法在cocalc里面再访问其他网页, 比如你用Jupyter写了一个网络服务程序, 那么是无法用在cocalc免费版里面的. 用git也会受限制. 没有网络连接最麻烦的是如果cocalc没有预装的包, 你是无法自行安装的. 不过如果确实是很常用有名的Python包, 那么可以向cocalc网站的支持发个email, 他们的响应速度超级快, 很有可能就帮你装好了.

Azure notebook

Azure notebook是微软提供的在线jupyter服务, 财大气粗的微软提供的内存, CPU, 存储空间都不错.

特色功能有二:

  • 方便一键clone, 看好其他人的做得不错的东西, 可以方便clone一份自己研究
  • 可以从github导入, 只需要将看中的github repo页面添加, 就可以自动clone, 如果对方更新了, 自己这边也可以方便使用git pull
    微软的这个服务是有网络连接的, 你可以远程下载数据或者导入其他的库. 因此如果出现没有预装的库, 可以自己手动安装. 但麻烦的是, 如果你的notebook停用1小时以后, 远程的server就会停止, 然后你之前安装的东西就会被清除(数据和文件不会), 所以如果有额外的库, 就需要在每次打开的时候预先再次安装一遍.

Google Colaboratory

借助 Colaboratory(简称 Colab),您可在浏览器中编写和执行 Python 代码,并且:

  • 无需任何配置
  • 免费使用 GPU
  • 轻松共享

无论您是一名学生数据科学家还是 AI 研究员,Colab 都能够帮助您更轻松地完成工作。

配置服务器的Jupyter Notebook 以提供服务

在服务器段安装Jupyter Notebook (使用Anaconda进行安装比较好)

在服务器完成配置

生成配置文件

$ jupyter notebook --generate-config

生成密码

C:\WINDOWS\system32>ipython
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from notebook.auth import passwd

In [2]: passwd() #需要输入密码
Enter password:
Verify password:
Passwords do not match.
Enter password:
Verify password:
Out[2]: 'sha1:9e5b5679bbbf:75d5e60xxxxxa029e798623626e443'

修改默认配置文件

c.NotebookApp.ip='localhost'
c.NotebookApp.password=u'sha1:9e5b5679bbbf:75d5e60xxxxxa029e798623626e443'
c.NotebookApp.open_brower=False
c.NotebookApp.port=5486
c.NotebookApp.allow_remote_access = True

启动Jupyter Notebook 服务

C:\WINDOWS\system32>jupyter notebook --allow-root --port=5486
[I 21:49:10.477 NotebookApp] JupyterLab extension loaded from C:\ProgramData\Anaconda3\lib\site-packages\jupyterlab
[I 21:49:10.477 NotebookApp] JupyterLab application directory is C:\ProgramData\Anaconda3\share\jupyter\lab
[I 21:49:10.540 NotebookApp] [Jupytext Server Extension] Deriving a JupytextContentsManager from LargeFileManager
[I 21:49:10.605 NotebookApp] Serving notebooks from local directory: C:\WINDOWS\system32
[I 21:49:10.606 NotebookApp] The Jupyter Notebook is running at:
[I 21:49:10.607 NotebookApp] http://localhost:5486/?token=daec549df6f4b10e87033fd57411cd69f1f032024321642a
[I 21:49:10.608 NotebookApp]  or http://127.0.0.1:5486/?token=daec549df6f4b10e87033fd57411cd69f1f032024321642a
[I 21:49:10.608 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 21:49:10.711 NotebookApp]

    To access the notebook, open this file in a browser:
        file:///C:/Users/86150/AppData/Roaming/jupyter/runtime/nbserver-22696-open.html
    Or copy and paste one of these URLs:
        http://localhost:5486/?token=daec549df6f4b10e87033fd57411cd69f1f032024321642a
     or http://127.0.0.1:5486/?token=daec549df6f4b10e87033fd57411cd69f1f032024321642a
ServeUrIpynb

但是,默认的路径是system32,自然希望直接定位到我的ipynb项目目录。

指定Jupyter Notebook访问目录

打开配置文件jupyter_notebook_config.py,全文搜索notebook_dir,找到后填入自己的工作路径并保存。(注意:工作路径不能出现中文,否则无法打开Jupyter Notebook)

ServeUrIpynb-ChangeDirConf

打开新的Anaconda Prompt,运行 jupyter notebook --allow-root --port=5486。再出现的目录就是指定的了。

ServeUrIpynb-ChangeDir

据说可以只改快捷方式的属性:“目标”那里的 “%USERPROFILE%” 删除,“起始位置”改成你希望的路径。

ServeUrIpynb-ChangeDirHomepath
  • 在不改 jupyter_notebook_config.py 文件的情况下,仅改变这两个地方,并不起任何作用。

  • 如果改了 jupyter_notebook_config.py,这两个地方都不改的话,从这个快捷方式进入 Jupyter Notebook 会进入默认路径,用 Anaconda Navigator 启动就会进入改变后的路径。对“目标”栏进行改动后,则从快捷方式进入,也会进入修改后的路径。“起始位置”那里的值,改不改都不影响。

想截些图,Snagit不能运行,查了下,Windows 自带一些截图的彩蛋呢!

  • 快捷键Win + PrintScreen:使用 Win + PrintScreen 快捷键截取全屏画面后,系统会将截图自动保存到「C:\Users\XXX\Pictures\屏幕截图」(XXX 为用户名称)目录下,省下了保存图片文件的操作步骤。

    • 我的实践中,在使用两个屏幕。Win + PrintScreen竟然将它们截到了一起。
    • Capture2Scrns
  • 快捷键Win + G:在 Windows 10 系统中,内置了一项针对游戏的特色截图工具,通过 Win + G 唤起简洁的工具条。这个截图工具可以实现在游戏中截取画面,也可以截取其他软件界面。截取的图片会保存在「C:\Users\XXX\Videos\Captures」(XXX 为用户名称)这个文件夹里。

客户远程访问

IP访问

此时应该可以直接从本地浏览器直接访问http://address_of_remote(服务器ip地址):5486就可以看到jupyter的登陆界面。

第一次登陆要求输入账号和密码,账号为服务器端用户名,密码即为刚刚第二步中设置的密码,即可看到目录列表。

SSH 访问

若上面输入网址无法进入,提示可能是防火墙问题,此时可以通过SSH访问远程服务器, 在Windows下通过xshell等工具访问远程服务器,可在会话中设置,选择属性-ssh-隧道。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容