0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

涨知识!iPad还可以运行Python代码

西西 作者:工程师3 2018-05-17 18:03 次阅读

其实,不只是iPad手机也可以。

痛点

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

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

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

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

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

在发布的教程文章里,我也已经把安装软件包的说明写得非常详细。

涨知识!iPad还可以运行Python代码

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

涨知识!iPad还可以运行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几秒钟。

涨知识!iPad还可以运行Python代码

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

涨知识!iPad还可以运行Python代码

这个界面来自 Jupyter Lab。

你可以将它理解为 Jupyter Notebook 的增强版,它具备以下特征:

代码单元直接鼠标拖动;

一个浏览器标签,可打开多个Notebook,而且分别使用不同的Kernel;

提供实时渲染的Markdown编辑器;

完整的文件浏览器;

CSV数据文件快速浏览

……

图中左侧分栏,是工作目录下的全部文件。

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

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

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

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

涨知识!iPad还可以运行Python代码

连图像也能正常显示。

涨知识!iPad还可以运行Python代码

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

涨知识!iPad还可以运行Python代码

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

就让Python输出你的名字吧。

假如你叫 Chuck,就这样写:

print(“Hello, Chuck!”)

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

涨知识!iPad还可以运行Python代码

其实,又何止是iPad而已?

你如果足够勇(sang) 于(xin) 尝(bing) 试(kuang),手机其实也是可以的。

就像这样。

涨知识!iPad还可以运行Python代码

流程

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

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

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

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

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

涨知识!iPad还可以运行Python代码

顺便说一句,这个样例来自于我的数据科学系列教程之《如何用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 的网址(https://mybinder.org/)。

涨知识!iPad还可以运行Python代码

在 “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”按钮。

涨知识!iPad还可以运行Python代码

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

以后每一次调用执行,就都会非常快了。

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

涨知识!iPad还可以运行Python代码

很有成就感吧!

测试一下,能够正常运行代码,就证明我们成功了。

但是你会发现,不对啊!

老师你刚才用 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

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

涨知识!iPad还可以运行Python代码

这下没问题了吧?

原理

你是不是觉得,mybinder 很黑科技

其实,也不算。

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

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

我们看看 mybinder 的说明:

涨知识!iPad还可以运行Python代码

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

Docker 是个什么东西呢?

简单来说,Docker 就是为了不同平台上,都能够顺利执行同一份代码的保障工具。

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

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

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

涨知识!iPad还可以运行Python代码

但是,如果你经常使用 Java 开发出来的工具,就应该了解痛点有哪些了。

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

涨知识!iPad还可以运行Python代码

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

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

至于其他好处,咱们就不展开了。否则听起来像广告。

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

它调用的,是另外的一个工具,叫做 repo2docker(https://github.com/jupyter/repo2docker) 。

涨知识!iPad还可以运行Python代码

而你的浏览器能够执行 Python 代码,是因为 Jupyter Notebook (或者Lab)本来就是建立在“浏览器/服务器”(Browser / Server, B/S)结构上。

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

jupyter lab

会出现什么?

涨知识!iPad还可以运行Python代码

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

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

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

另外,如果你以为 mybinder 只能让你在浏览器上跑 Python 代码,那就太小瞧它了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • iPad
    +关注

    关注

    1

    文章

    1308

    浏览量

    80594
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466
收藏 人收藏

    评论

    相关推荐

    为何Python运行效率低?python语言入门

    效率低,那么是什么原因导致的呢?1. python是动态语言动态语言是一类在运行可以改变其结构的语言,如新的函数、对象、代码可以被引入,已
    发表于 02-01 18:47

    Python 代码加速运行的的小技巧

    Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足。但是,有很多时候,Python 的效率并没有想象中的那么夸张。本文对一些 Python 代码
    的头像 发表于 09-01 11:28 1502次阅读

    使Python代码在BeagleBoard上运行

    电子发烧友网站提供《使Python代码在BeagleBoard上运行.zip》资料免费下载
    发表于 06-16 15:03 0次下载
    使<b class='flag-5'>Python</b><b class='flag-5'>代码</b>在BeagleBoard上<b class='flag-5'>运行</b>

    python怎样运行代码

    讨论Python代码运行方式,包括解释器、交互式环境和命令行。 Python代码可以通过两种主
    的头像 发表于 11-22 10:31 637次阅读

    python如何换行而不运行代码

    的情况下可以使用换行字符来达到这个目的。 在Python中,换行字符一般是使用符号来表示。下面是一些常用的换行字符示例: 在字符串中使用换行字符: 在字符串中,可以使用换行字符来换行而不运行
    的头像 发表于 11-22 10:52 1258次阅读

    python如何查看运行过程

    Python是一门高级编程语言,可以用于开发各种类型的应用程序、网站和数据分析。当我们编写并运行Python程序时,有时候需要了解程序执行的详细过程,以便调试
    的头像 发表于 11-22 11:13 908次阅读

    python运行一次自动再次运行

    使用循环语句是最简单的一种实现自动运行功能的方法。在Python中,可以使用while循环或for循环来实现。下面是一个使用while循环实现自动运行的例子: while True
    的头像 发表于 11-23 15:52 506次阅读

    python代码写完后点哪个运行

    当你完成了编写Python代码后,你可以选择多种方式来运行它。下面是几种常见的运行代码的方式:
    的头像 发表于 11-24 09:28 1175次阅读

    如何运行Python程序

    运行Python程序非常简单。Python是一种解释型语言,这意味着可以直接通过解释器来执行代码。下面我将详细介绍如何
    的头像 发表于 11-24 09:31 693次阅读

    python如何换行而不运行代码

    和可读性。 在Python中,可以使用两个主要的方法进行换行:使用反斜杠()和使用圆括号(())。 第一种方式是使用反斜杠()来表示换行。在Python中,反斜杠是一个转义字符,它可以
    的头像 发表于 11-24 09:50 1348次阅读

    绘制同切圆python代码怎么运行

    绘制同切圆是一个很有趣的数学问题,可以使用Python语言进行实现。在这篇文章中,我们将探讨同切圆的概念、绘制同切圆的算法和Python代码的实现。 同切圆的概念 同切圆是指具有相同圆
    的头像 发表于 11-28 15:55 870次阅读

    python软件怎么运行代码

    Python是一种高级编程语言,它被广泛用于开发各种类型的应用程序,从简单的脚本到复杂的网络应用和机器学习模型。要运行Python代码,您需要一个P
    的头像 发表于 11-28 16:02 533次阅读

    python软件IDLE怎么打多行代码

    和一个用于编写、编辑和运行Python代码的编辑器窗口。在IDLE中编写多行代码有几种方法可以实现。 使用括号与换行符: 在IDLE中编写多
    的头像 发表于 11-29 15:00 1878次阅读

    python运行指定几行

    Python是一种高级编程语言,可以用于开发各种类型的应用程序,包括网站、桌面应用程序、数据分析和人工智能等。在Python运行指定的几行代码
    的头像 发表于 11-29 15:04 372次阅读

    python怎么让前面的不运行

    Python中,我们通常使用注释来禁止代码片段的运行。注释是程序中用来解释代码目的、功能和实现细节的文本片段。我们可以通过在
    的头像 发表于 11-29 15:06 601次阅读