前一段时间莫名地想用Python开发手机应用。经过日日夜夜在互联网上的挖掘于是有了这样一篇导航性的文章兼入坑/踩坑记录。必须承认Python在手机领域的进展还停留在研发阶段,作者也是真心希望更多的大佬参与到这个领域的先驱部队中,开发出一款完备的引擎之类的。
如题,今天的主题是想要在手机上运行和开发Python程序,以及为手机打包Python编写的程序。因为作者用的是自由软件一家亲(Pine64+Pro1X)所以这里所说的以Android为主。这可以简单的分为以下几类:
可用的选项 | 构建程序/项目 | 功能 |
---|---|---|
文本编辑器 | FHCode | 在手机上编写 |
Carnetsis | 在手机上编写,并用网络运行 | |
第三方集成App | Google的Pydroid | 在手机上编写,基础解释 |
QPython | 在手机上编写,基础解释 | |
可用的开源项目 | Kivy项目 | 在手机上基础解释,在电脑上打包发行 |
Beeware项目 | 在电脑上打包发行 | |
Google的SL4A项目 | 在电脑上集成,在手机上编写,较原生地解释 | |
TkinterDesigner | 在电脑上打包发行 | |
电脑系统模拟层实现 | Termux | 在手机上编写,较完全地解释(轻量级) |
AidLux | 在手机上编写,完全地解释(重量级) | |
基于Web的方式 | 任意浏览器 | 在手机上访问Python网页 |
Jyhon方式 | Java | 在电脑上集成,引用Java库 |
文本编辑器可用于在手机上编写Python程序。其实任意的文本编辑器都可以做到这点,但我还是更推荐以下这款。
FHCode是一款可以在手机上编辑代码的开源软件。它提供语法高亮、自动缩进、多开管理等众多功能。你可以从 这个官方网页 或F-droid客户端上下载它。这 是它的Github项目页面。
这个应该不用我解释,这是个IPhone和IPad上的“独立的Jupyte notebook终端"
“standalone Jupyter notebook app available on iPad and iPhone”
显然上面的解决方案不能满足我们的要求。为此,一些公司在编写Python代码的基础上又增加了一些别的功能:基本的软件内解释、一些常用的库的内置版本、一些Debug措施、一个终端仿真器等等。
Pydrod由Google官方开发,是手机上最成熟的Python集成App。和它一系列的软件还有C4droid、Jvdroid等。它提供基本的代码补全、基本的解释、快速的常用库下载(由该公司优化或重新在手机上实现,很全面)、官方的Pip仓库的访问(当然通常安装失败)、一个强大的终端仿真器、一个Python交互式界面、代码分享和一些其他功能。
这是一个成熟稳定的方案,它甚至提供了Tkinter, Matplotlib, PyQt, Pygame, Kivy, Pandas这样的Gui库。如果你想用手机来编写/学习Python程序(也就是不打包)或单纯想在手机上玩Pygame游戏的话,这是一个不错的选择。如果给Google冲钱的话,那你的体验就更好了。
对了,破解版(任何不是从GooglePlayStore上下载的)在安装第三方库时好像会遇到一些问题。
一个更全面的介绍(附下载链接)
既然说了Pydroid了,那为什么还要再讲一个QPython呢?因为QPython在Web上面表现出色。它在大部分情况下和Pydroid没什么区别,但它据说支持开发网页、做服务器等、而且好像支持引用Andriod的API。更详细的介绍请参见 官网 。
虽然之前讲了一些解释Python代码的程序,但这些程序显然不能用于发布成品App,当个学习/开发环境使还差不多。于是我又搜索了这些内用。
Kivy是一个开源的Python跨平台应用构建项目(它不只是个GUI库),它可以开发任何平台的应用。它为所有的平台提供一个类似虚拟机的环境,所以你的程序在视觉上没有区别,安装包就很大。你可以用从该项目内部建立的(现在已经不再是内部项目了)python-for-android打包器(内置numpy和几个常用包)来打包程序供Andriod运行(要求开发环境为Linux或Linux虚拟机,并用有Android工具链)。现在支持打包为apk的有:纯Python程序,Pysdl2程序和WebView程序, Kivy程序——当然你可以把纯Python的第三方库直接Ctrl-C进去。这是个研发阶段的打包器,所以可能遇到各种不明问题。IOS你就只能用它内置的打包器了。你也可以直接在手机上安装KivyLauncher并解释Kivy软件(那你就只能用标准库了)。它也许不是很好学,但它提供了一个有用的.kv标记语言,这对于开发一个小游戏(不是指安装包小)来说足够了。
据说,你可能会遇到一些关于中文显示的问题。
官方打包教程(全平台)
简单打包教程(Android)
全面打包教程(多平台)
中文显示教程(是否可用于打包后未知)
Beeware也是一个开源的Python跨平台应用构建项目,可以发布Linux, Andriod, Windows和ios包。它明显比Kivy的知名度低,这可能是因为它加了一个开始动画,和不大好看的默认图标... 不过这不是很重要。它要比Kivy成熟得多,基本上跟着官方文档学习就没有问题。
SL4A即Scripting Layer For Android是Google为Android开发的一个超酷的脚本语言解释层。现在已经支持解释Python、Perl、JRuby、Lua、BeanShell、JavaScript、Tcl和shell。这是在Android上运行Python程序最底层、最高效的方案。它吸引人的地方在于真的在Android上装的一个CPython解释器,可以使用任何纯Python库、并且还可以访问大量的Android API。这使它拥有许多非常突出的优点:调用照相机,调用FileExplorer,使用文字阅读器,连接蓝牙,打造最原生的Android界面等等。最后还可以用Eclipse把它和脚本打包融合到一起用于发布。这是关于打包的一篇文章(下面那段)。
当然它也有一些缺陷:下载Python解释器时需要挂梯子;界面有些非常古老;直接运行脚本时可能遇到一些权限问题、解释器问题;因为你的Android版本过新而崩溃...还有,你几乎找不到任何关于它的中文教程。
优秀的入门教程(亲测可用,下载解释器那步需要挂梯子)
用于开发大型项目的全面教程(含打包过程)
TkinterDesigner是个Tkinter软件的速成工具,由国人开发。整体功能都非常完善,真正意义上简化了Tkinter程序的开发。它还增加了一些新控件,去除了一些“反人类”设计等。一下是几个关于把程序打包成apk的早期尝试:
当时的预告片
视频链接
以下的方案并不适合打包发行App,但你可以用这种方式把你的手机秒变成一个服务器。除此以外,你可以使用优秀的Linux生态中的一部分。
Termux是一个自由软件Linux模拟层,当然你可以在里面下到完整的Linux控制台发行版。它是一个轻量的选择,几乎没怎么模拟Linux的环境,只是提供了一个可以运行一些Linux程序的层。默认没有桌面,但你可以通过一些外部方式来安装小部分的裁减版桌面环境(这确实可行,只是有些麻烦)。哦对了,记得保证好你的网速,否则你会感受到Linux程序看起来下完了,实则没法运行的快乐。、
安装完整发行版
安装桌面环境和配置语言(有些关于下载的步骤可能需要挂梯子)
依我来看,AidLux从一开始设定就和Termux完全相反。Termux 100MB,它就偏5GB;Termux默认啥都没有,它就直接安装一整个开发环境(真的很强大);Termux默认没有装什么发行版,它就一定要装一个(甚至还有桌面环境);Termux 红米Note1都能流畅运行,它就非要卡死所有2020年以前的手机。总的来说,这绝对是个重量级的方案。不过也确实除了把Python打包为apk以外啥都行。
这个不用我多说,哪台手机没有浏览器呢?如今在线Python解释器满天飞(虽然大多数都是渣渣),许多网页或网页游戏用Python开发... 哦对了,你听说过Anaconda的Pyscript吗?
Jython即Java Python,是用Java实现的Python(但是不能编译成字节码)。如果你熟悉Java的 Android程序开发环境的话,这也是一个可行的方案。Jtython虽然不支持很多经典的Python包,但可以调用Java的相关的包(当然还包括Android相关的包)。你可以把Jython编写的软件打包成apk包并发行。
这里需要注意几点:Jython很多第三方库都不支持;如果用到C语言编的库的话,你可能需要学习一下集成环境中的交叉编译。最重要的一点是:你目前得忍受早已停用的Python2...
总之,这就是人们目前为Python在手机端做的所有努力(也是作者在Internet上面挖掘的所有结果)。可以看到,Python在手机方面的内容都正处于早期阶段,有许多的大神先驱正在努力地帮我们开路。很多方案必须真的了解Android应用开发的全部/部分过程(或至少知道怎么使用相关的集成环境/工具链即AndroidNDK等)。我非常希望更多的人加入到这个贫瘠的领域,把Python更多地带到手机上。