如何用iPad运行Python代码?

其实,不仅是iPad,手机也能够。python

痛点

我组织过几回线下编程工做坊,带着同窗们用Python处理数据科学问题。git

其中最让人头疼的,就是运行环境的安装。github

实事求是地讲,参加工做坊以前,我已经作了认真准备。web

例如集成环境,选用了对用户很友好的Anaconda。docker

代码在个人Macbook电脑上跑,没有问题。还拿到学生的Windows 7上跑,也没有问题。这才上传到了Github。编程

在发布的教程文章里,我也已经把安装软件包的说明写得很是详细。浏览器

还针对 Anaconda 这一 Python 运行环境的安装和运行,专门录制了视频服务器

可是,工做坊现场碰见的问题,依然五花八门。微信

有的是操做系统。例如你可能用Windows 10。实话实说,我确实没用过。拿着Surface端详,连安装后的Anaconda文件夹都找不到在哪儿。网络

有的是编码。不一样操做系统,有的默认中文编码是UTF-8,有的是GBK。一样一段中文文本,我这里显示一切正常,你那里就是乱码。

有的是套件路径。来参加工做坊前,你可能看过我一些教程,并安装了 Python 2.7 版本 Anaconda。来到现场,一看须要 Python 3.6 版本,你就又安装了一份新的。结果执行起来,你根本分不清运行的 Python, pip 命令来自哪个套件,更搞不清楚软件包究竟安装到哪里去了。再加上虚拟环境配置,你就要抓狂了。

还有的,甚至是网络拥塞问题。由于有时须要现场安装调用体积庞大的软件包,几十台电脑“预备——齐”一块儿争抢有限的Wifi带宽,后果可想而知。

痛定思痛,我决定改变一下现状。

目前的教程只提供基础源代码。对于许多新手同窗来讲,是不够的。

许多同窗,就倒在了安装依赖软件包的路上,继而干脆放弃了。

变通的办法有许多。例如干脆录制代码执行视频给你看。

可是正如我在《MOOC教学,什么最重要?》一文中说过的,学习过程里,反馈最重要。

你须要能运行代码,而且第一时间得到结果反馈。

在此基础上,你还得能修改代码,对比先后执行结果的差异。

我得给你提供一个直接能够运行的环境。

零安装,天然也就没了上述烦恼。

这个事儿可能吗?

我研究了一下,没问题。

只要你的设备上有个现代化浏览器(包括但不限于Google Chrome, Firefox, Safari和Microsoft Edge等)就行。

IE 8.0?

那个不行,赶忙升级吧!

读到这里,你应该想明白了。由于只挑浏览器,不挑操做系统,因此别说你用Windows 10,你就是用iPad,都能运行代码。

尝试

请你打开浏览器,输入这个连接(http://t.cn/R35fElv)。

看看会发生什么?

我这里用iPad给你演示。

一开始会有个启动界面出来。请你稍等10几秒钟。

而后,你就能看到熟悉的Python代码运行界面了。

这个界面来自 Jupyter Lab。

你能够将它理解为 Jupyter Notebook 的加强版,它具有如下特征:

  • 代码单元直接鼠标拖动;
  • 一个浏览器标签,可打开多个Notebook,并且分别使用不一样的Kernel;
  • 提供实时渲染的Markdown编辑器;
  • 完整的文件浏览器;
  • CSV数据文件快速浏览
  • ……

图中左侧分栏,是工做目录下的所有文件。

右侧打开的,是我们要使用的ipynb文件。

为了证实这不是逗你玩儿,请你点击右侧代码上方工具栏的运行按钮。

点击一下,就会运行出当前所在代码单元的结果。

不断点击下来,你能够看见,结果都被正常渲染。

连图像也能正常显示。

甚至连下面这种须要必定运算量的可视化结果,都没问题。

为了证实这不是变魔术,你能够在新的单元格,写一行输出语句。

就让Python输出你的名字吧。

假如你叫 Chuck,就这样写:

print("Hello, Chuck!")
复制代码

把它替换成你本身的姓名,看看输出结果是否正确?

其实,又何止是iPad而已?

你若是足够勇(sang) 于(xin) 尝(bing) 试(kuang),手机其实也是能够的。

就像这样。

流程

下面我给你讲讲,这种效果是怎么作出来的。

咱们须要用到一款工具,叫作 mybinder 。它能够帮助咱们,把 github 上的某个代码仓库(repo),快速转换成为一个可运行的环境。

注意 mybinder 为咱们提供了云设施,也就是计算资源和存储资源。所以即使许许多多的用户同时在线使用同一份代码转换出来的环境,也不会互相冲突。

咱们先来看看,怎么准备一个可供 mybinder 顺利转换的代码仓库。

我为你提供的样例在这里t.cn/R35MEqk):

顺便说一句,这个样例来自于个人数据科学系列教程之《如何用Python处理天然语言?(Spacy与Word Embedding)》。感兴趣的同窗能够点击连接,查看原文。

在该 GitHub 页面展现的文件列表中,你须要注意如下3个文件:

  • demo.ipynb
  • environment.yml
  • postBuild

其中demo.ipynb就是你在上一节看到的包含源代码的Jupyter Notebook文件。你须要首先在本地安装相关软件包,而且运行测试经过。

若是在你本地运行都有错误,放到云上去,想必也难以正常运行。

environment.yml文件很是重要,它来告诉 mybinder ,须要如何为你的代码运行准备环境。

咱们打开看看该文件的内容:

dependencies:
  - python=3
  - pip:
    - spacy
    - ipykernel
    - scipy
    - numpy
    - scikit-learn
    - matplotlib
    - pandas
    - thinc
复制代码

这个文件首先告诉 mybinder ,你的 Python 版本。咱们采用的是 3.6 版。因此只须要指定 python=3 便可。mybinder 会自动为你下载安装最新的。

而后这个文件说明须要使用 pip 工具安装哪些软件包。咱们须要把全部依赖的安装包都罗列出来。

这就是以前,我总在教程里给你说明的那些准备步骤。

可是这尚未完,由于 mybinder 只是为你安装好了一些软件依赖。

这里还有两个步骤须要处理:

  • 为了分析语义,咱们须要调用预训练的Word2vec模型,这须要 mybinder 为咱们提早下载好。
  • Jupyter Notebook 打开后,应当使用的 kernel 名称为 wangshuyi ,这个 kernel 目前尚未在 Jupyter 里面注册。咱们须要 mybinder 代劳。

为了完成上述两个步骤,你就须要准备最后一个postBuild文件。

它的内容以下:

python -m spacy download en
python -m spacy download en_core_web_lg
python -m ipykernel install --user --name=wangshuyi
复制代码

跟它的名字同样。它是在 mybinder 依据 environment.yml 安装了依赖组建后,依次执行的命令。若是你的代码须要其余的命令提供环境支持,也能够放在这里。

至此,你的准备工做就算结束了。

魔法表演正式开始。

请打开 mybinder 的网址mybinder.org/)。

在 “GitHub repo or URL” 一栏,填写咱们的 github 代码仓库连接,即:

https://github.com/wshuyi/demo-spacy-text-processing
复制代码

咱们但愿一进入界面,就自动打开 demo.ipynb ,所以须要在“Path to a notebook file (optional)”一栏填写demo.ipynb

这时,你会发现“Copy the URL below and share your Binder with others:”一栏中,出现了你的代码运行环境网址。

https://mybinder.org/v2/gh/wshuyi/demo-spacy-text-processing/master?filepath=demo.ipynb
复制代码

点击右侧的“复制”按钮保存到你的记事本里面。未来找到你转换好的运行环境,就全靠它了。

妥善保存地址后,点击“Launch”按钮。

根据你的依赖安装包数量等因素,你须要等待的时间长短不一。可是只有第一次构建的时候,须要花一些时间。

之后每一次调用执行,就都会很是快了。

构建完毕后, mybinder 会自动为咱们开启对应的运行环境。

颇有成就感吧!

测试一下,可以正常运行代码,就证实咱们成功了。

可是你会发现,不对啊!

老师你刚才用 iPad 展现的,不是高级版的 Jupyter Lab 吗?怎么又变成了 Jupyter Notebook 了?

我也想要高级版!

别着急。

看看你目前的连接地址:

https://mybinder.org/v2/gh/wshuyi/demo-spacy-text-processing/master?filepath=demo.ipynb
复制代码

你只须要作个小小的调整,将其中的:

?filepath=
复制代码

替换为:

?urlpath=lab/tree/
复制代码

替换后的连接为:

https://mybinder.org/v2/gh/wshuyi/demo-spacy-text-processing/master?urlpath=lab/tree/demo.ipynb
复制代码

把它输入到浏览器,看看出来的结果:

这下没问题了吧?

原理

你是否是以为,mybinder 很黑科技?

其实,也不算。

它只是把已有的几项技术,连接了起来。

这大概也算是“积木式创新”的一个实例吧。

咱们看看 mybinder 的说明:

能够看到,其中最为关键的技术,是用了 docker 。

Docker 是个什么东西呢?

简单来讲,Docker 就是为了避免同平台上,都可以顺利执行同一份代码的保障工具。

你有些犹疑,这说的不是 Java 吗?

没错,Java 的宣传口号,就是一次编码,各处运行。

它利用虚拟机,来保障这种能力。

可是,若是你常用 Java 开发出来的工具,就应该了解痛点有哪些了。

至少,你应该对 Java 程序的运行速度,有一些体会。

上图中,左侧是虚拟机,右侧是Docker。

Docker 不但效率上要强过 Java 虚拟机,并且它支持的编程语言也不只仅是一种。

至于其余好处,我们就不展开了。不然听起来像广告。

其实,把 github 代码仓库转换为 docker 镜像(image)的工做,也不是 mybinder 本身来作的。

它调用的,是另外的一个工具,叫作 repo2dockergithub.com/jupyter/rep…) 。

而你的浏览器可以执行 Python 代码,是由于 Jupyter Notebook (或者Lab)原本就是创建在“浏览器/服务器”(Browser / Server, B/S)结构上。

若是你已经在本地计算机安装过 Anaconda ,那不妨看看本地执行这个语句:

jupyter lab
复制代码

会出现什么?

对,它开启了一个服务器,而后打开你的浏览器,跟这个服务器通信。

Jupyter 的这种设计,自己就让它的扩展极为方便。

不管 Jupyter 服务器是运行在你的本地笔记本上,仍是摆在另外一个大洲的机房,对你执行 Python 代码来讲,都是没有本质区别的。

另外,若是你觉得 mybinder 只能让你在浏览器上跑 Python 代码,那就过小瞧它了。

学过 R 的同窗,请点击这个连接(t.cn/R3JLY2S),看看有什么惊喜。

小结

总结一下,本文为你讲述了如下内容:

  • 如何利用 mybinder ,把一个 github repo 一键转换成 Jupyter Lab 运行环境;
  • 如何在各类不一样操做系统的浏览器上,运行该环境,编写、执行与修改代码;
  • mybinder 转换 github repo 的幕后英雄 docker 简介。

我但愿你能想到的,不只仅是这点儿简单的用途。

提几个问题给你,做为思考题:

  • 若是代码执行都在云端完成,教学实验室机房还有没有必要预装一大堆软件,且不按期更新维护?
  • 学校的编程练习、做业和考试有没有可能经过这种方式,直接远程进行,而且自动化评分?
  • 既然应用的技术都是开源的,你有没有可能利用这些开源工具搞个创业项目。例如提供深度学习环境,租赁给科研机构与创业公司?

期待你触类旁通,作出有趣又有意义的创新来。

讨论

在 iPad 上运行 Python 代码的感受怎么样?你用过相似的产品吗?你以为有了这种技术,在平常工做和学习中,还能够有哪些有趣的应用场景?欢迎留言,把你的经验和思考分享给你们,咱们一块儿交流讨论。

若是你对个人文章感兴趣,欢迎点赞,而且微信关注和置顶个人公众号“玉树芝兰”(nkwangshuyi)

若是本文可能对你身边的亲友有帮助,也欢迎你把本文经过微博或朋友圈分享给他们。让他们一块儿参与到咱们的讨论中来。

延伸阅读

如何高效入门数据科学?

相关文章
相关标签/搜索