当前位置: 首页 > 科技观察

如何在iPad上运行Python代码?_0

时间:2023-03-15 18:17:22 科技观察

其实不止是iPad,手机也是。痛点我组织了几次线下编程工作坊,带领学生使用Python来处理数据科学问题。其中最麻烦的就是运行环境的安装。老实说,我在参加工作坊之前做了很认真的准备。比如集成环境使用Anaconda,非常人性化。代码在我的Macbook上运行没有问题。我也弄到学生的Windows7上运行,没有问题。这已上传到Github。在发布的教程文章中,我也非常详细地写了安装包的说明。还专门录制了Python运行环境Anaconda的安装运行视频。但是,车间遇到的问题还是五花八门。有些是操作系统。比如你可能用的是Windows10。说实话,我真的没用过。用Surface看,安装后连Anaconda文件夹都找不到。有些是编码的。根据操作系统的不同,有的默认中文编码是UTF-8,有的是GBK。同样的一段中文,我是正常的,你是乱码。有些是包路径。在参加研讨会之前,您可能看过我的一些教程并安装了AnacondaforPython2.7。来到现场看到需要Python3.6,就安装了一个新的。结果,当你执行它的时候,你无法分辨运行的Python和pip命令来自哪个包,更不知道这个包安装在哪里。将其添加到虚拟环境配置中,你会发疯的。甚至还有网络拥塞问题。由于有时需要现场安装和调用体积庞大的软件包,几十台电脑“一起准备”,共同争夺有限的Wi-Fi带宽,后果可想而知。痛定思痛后,我决定改变现状。当前教程仅提供基本源代码。对于许多新手学生来说,这还不够。很多同学在安装依赖软件包的路上摔倒了,然后干脆放弃了。有很多解决方法。比如干脆录一段代码执行的视频给你看。但正如我在《MOOC教学,什么最重要?》一文中所说,反馈是学习过程中最重要的。您需要能够运行代码并立即获得有关结果的反馈。在此基础上,你还得会修改代码,比较前后执行结果的差异。我得给你提供一个可以直接运行的环境。有了零安装,上述的烦恼自然就没有了。这可能吗?我研究了一下,没问题。只要您的设备上装有现代浏览器(包括但不限于GoogleChrome、Firefox、Safari和MicrosoftEdge等)。浏览器8.0?那行不通,立即升级!看完这篇你应该明白了。因为你只选择浏览器,不选择操作系统,更不用说Windows10了,即使你用iPad也能运行代码。请打开您的浏览器并输入此链接(http://t.cn/R35fElv)。走着瞧吧?我在iPad上给你看这个。一开始,会有一个启动界面。请等待10秒。然后,就可以看到熟悉的Python代码运行界面了。此界面来自JupyterLab。你可以把它理解为JupyterNotebook的增强版,它有以下特点:直接鼠标拖动代码单元;一个浏览器选项卡,可以打开多个笔记本,并使用不同的内核;提供实时渲染的Markdown编辑器;一个完整的文件浏览器;CSV数据文件速览...图中左边一栏是工作目录下的所有文件。右边打开就是我们要使用的ipynb文件。为了证明这不是玩笑,请点击右侧代码上方工具栏上的运行按钮。一键运行当前代码单元的结果。一直往下点,可以看到结果正常渲染了。甚至图像也可以正常显示。即使是下面这种需要一定计算量的可视化结果也是可以的。为了证明这不是魔术,您可以在新单元格中编写输出语句。就让Python输出你的名字吧。如果你叫查克,就这样写:print("Hello,Chuck!")换成你自己的名字,看看输出是否正确?其实,它不仅仅是一台iPad?如果你够勇敢(sang)去(xin)尝(bing)试(kuang),手机也是可以的。像这样。下面给大家说说过程,这个效果是怎么做出来的。我们需要使用一个名为mybinder的工具。它可以帮助我们快速将github上的一个代码仓库(repo)转化为可运行的环境。注意mybinder为我们提供了云端设施,即计算资源和存储资源。因此,即使很多用户同时在线使用同一代码转换的环境,也不会相互冲突。我们先来看看如何准备一个可以被mybinder顺利转换的代码仓库。我给大家提供的示例在这里(http://t.cn/R35MEqk):顺便说一下,这个示例来自我的一个数据科学系列教程《如何用Python处理自然语言?(Spacy与Word Embedding)》。感兴趣的同学可以点击链接查看原文。在GitHub页面显示的文件列表中,需要关注以下三个文件:demo.ipynbenvironment.ymlpostBuild其中demo.ipynb是JupyterNotebook文件,包含上一节看到的源码。需要先在本地安装相关包,运行测试通过。如果你本地运行有错误,在云端肯定很难正常运行。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提前帮我们下载好。JupyterNotebook打开后,应该使用的内核名称是wangshuyi,而这个内核还没有在Jupyter中注册过。我们需要mybinder为我们做这件事。为了完成以上两步,你需要准备一个postBuild文件。其内容如下:python-mspacydownloadenpython-mspacydownloaden_core_web_lgpython-mipykernelinstall--user--name=wangshuyi同名。是mybinder根据environment.yml安装依赖组件后依次执行的命令。如果你的代码需要其他命令提供环境支持,也可以放在这里。至此,您的准备工作就结束了。魔术表演正式开始。请打开mybinder(https://mybinder.org/)的URL。在“GitHubrepoorURL”一栏,填写我们github代码仓库的链接,即:https://github.com/wshuyi/demo-spacy-text-processing我们希望demo.ipynb自动打开为一进入界面,因此需要在“Pathtoanotebookfile(optional)”一栏填写demo.ipynb。这时候你会发现“复制下面的URL并将你的Binder分享给其他人:”栏中出现了你的代码运行环境的URL。https://mybinder.org/v2/gh/wshuyi/demo-spacy-text-processing/master?filepath=demo.ipynb单击右侧的“复制”按钮将其保存到记事本中。以后找到你转换后的运行环境,全靠它了。正确保存地址后,单击“启动”按钮。根据您的依赖安装包数量等因素,您需要等待的时间长短会有所不同。但仅对于第一次构建,需要一些时间。随后的每一次调用执行都会非常快。构建完成后,mybinder会自动为我们打开相应的运行环境。很有成就感!测试一下,如果能正常运行代码,就证明我们成功了。但是你会发现不对!老师,您刚才用iPad展示的,不就是JupyterLab的进阶版吗?怎么又变成JupyterNotebook了?我也想要进阶版!不用担心。看你现在的链接地址: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.ipynbInput进入浏览器查看结果:现在有什么问题吗?你觉得mybinder是黑科技吗?其实,也不算。它只是链接了几种现有技术。这大概就是“积木式创新”的一个例子。再看mybinder的描述:可以看出最关键的技术是docker的使用。什么是码头工人?简单的说,Docker是同一代码在不同平台上顺利执行的保障工具。你有点犹豫,这不是在说Java吗?没错,Java的口号就是一次编码,到处运行。它使用虚拟机来保证此功能。但是,如果你经常使用用Java开发的工具,你应该知道痛点是什么。至少,您应该对Java程序的运行速度有一些体验。上图中,左边是虚拟机,右边是Docker。Docker不仅比Java虚拟机效率更高,而且还支持不止一种编程语言。至于其他的好处,我们就不展开了。否则听起来像广告。事实上,将github代码仓库转换成docker镜像(image)的工作并不是mybinder自己完成的。它调用另一个名为repo2docker(https://github.com/jupyter/repo2docker)的工具。而你的浏览器可以执行Python代码,因为JupyterNotebook(或Lab)最初是建立在“浏览器/服务器”(Browser/Server,B/S)结构之上的。如果你已经在本地电脑上安装了Anaconda,不妨看看在本地执行这条语句:jupyterlab中会出现什么?是的,它启动一个服务器,然后打开浏览器,并与服务器通信。Jupyter本身的设计使其扩展起来极其方便。无论Jupyter服务器是运行在你本地的笔记本电脑上,还是在另一个大陆的机房里,你执行Python代码都没有本质区别。另外,如果你认为mybinder只能让你在浏览器上运行Python代码,那你就小看它了。学过R的同学,请戳这个链接(http://t.cn/R3JLY2S)看看有什么惊喜。总结综上所述,本文为大家介绍了以下内容:如何使用mybinder将githubrepo一键转换为JupyterLab运行环境;如何在各种操作系统的浏览器上运行这个环境,编写、执行和修改代码;mybinder在幕后转换githubrepo英雄docker配置文件。我希望你能想到的不仅仅是这个简单的使用。这里有几个问题供大家思考:如果代码执行全部在云端完成,是否需要在教学实验室机房预装大量软件,并时常更新维护时间?学校有编程练习、作业和考试吗?或许这样可以直接远程进行,自动评分?由于应用的技术都是开源的,你是否可以使用这些开源工具来启动一个项目。比如提供深度学习环境,租给科研机构和创业公司?期待大家举一反三,做出有趣有意义的创新。