1. 为什么我会在手机上写Python?从一个忘带电脑的下午说起
大概两个月前,我在外地处理一个临时数据问题,笔记本忘在办公室,手头只有一部 iPhone。那时我需要快速跑一个 Python 脚本,把几十个 JSON 文件合并成 CSV,再抽几个关键字段。打开应用商店搜了一圈,发现能写代码的编辑器不少,但能真正运行 Python、还能装第三方库的几乎没有。那个下午我翻遍了各路应用评论,最后在一款冷门但功能完整的 IDE 里解决了问题,就是后面要重点聊的 PyGo IDE。
你可能觉得在手机上写 Python 是伪需求,但对我来说不是。我的工作经常有“马上跑一下看看结果”的时刻,比如日志清洗、接口数据校验、把表格转格式。这些脚本都很短,几十行到一两百行,用电脑开个编辑器反而太重。手机端能跑 Python,意味着我可以在地铁上、咖啡馆里、甚至排队的时候把问题处理完。更关键的是,这个 IDE 内置了 AI 助手,还能直接调用 iPhone 的原生能力,比如摄像头、日历、定位、文件共享,这让手机端写 Python 从“勉强能用”变成了“真的有用”。
先把人分一下:如果你属于下面任何一类,这篇文章值得看完。一是经常和数据打交道,临时要处理小文件的效率党;二是刚学 Python,通勤时间不想荒废的初学者;三是做自动化小工具,希望用手机控制摄像头、拍照片做 OCR、读写日历的进阶玩家。如果以上都不沾,你可能觉得我在小题大做,但我建议你先看第 4 部分的实操案例,看完大概率会改变想法。
1.1 移动端 Python 的尴尬现状:编辑器很多,能跑的很少
App Store 里搜索 Python,出来的大部分结果分两类。第一类是语法高亮编辑器,支持代码补全和文件浏览,但根本没有 Python 解释器,写完代码只能在本地存着,想运行还得复制到电脑。第二类是“在线沙箱”,点击运行后把代码传到服务器,等云端返回结果,这类工具对网络要求高,还经常限制执行时间,更别说访问 iPhone 本地的文件了。
真正能在本地跑 Python 的,往往又受限于另一个问题:依赖库装不上。手机上要装 NumPy、Requests 这类常用库,不像电脑上一条 pip install 就能解决,很多 IDE 因为 iOS 沙盒机制,只能内置一个精简解释器。而 PyGo IDE 给我的第一感觉是,它把“桌面端工程化”的思路搬到了手机里:有文件目录树,有终端面板,有一个独立的 Python 解释环境,甚至能显示脚本的 CPU 占用和内存占用。虽然谈不上完全对标电脑,但至少我看到的是,项目文件、资源目录、依赖管理都是完整可用的。
1.2 实际需求画像:哪些人真的需要移动端 Python
我总结下来,最适合在 iPhone 上跑 Python 的有三类人。
第一类是运维和数据分析师的“碎片时间处理器”。比如我,经常要验证一个小想法,或者跑一段调试代码。用手机做这种事的核心诉求是“快速打开、立刻能跑、不打断思路”。PyGo IDE 打开项目后停留在上次的编辑位置,运行结果直接输出在下方,这个体验让我越来越依赖它。
第二类是学生。很多人在通勤路上想复习 Python 语法,但光看书不够,手痒想写。手机上的 IDE 最好能即时反馈,最好还有一个 AI 助手帮忙解释报错。这东西对学生来说非常香,因为它不只是一个代码编辑器,更像一个随身的私教。
第三类是创意自动化玩家。iOS 的摄像头、传感器、日历、提醒事项这些原生能力,原本只有 Swift 开发者能调用。但 PyGo IDE 把这些能力封装成了 Python API,你不需要学 Swift 和 Xcode,只用几行 Python 就能让手机干活。这大大降低了 iPhone 自动化工具的门槛。后面我会用几个实际案例证明,这条路真的走得通。
2. PyGo IDE 的核心设计:它不是玩具,是移动开发环境
先说结论:PyGo IDE 是我试了十几个 App 之后唯一留下来长期用的,原因有三个。第一,它有独立的本地 Python 解释器,不是云执行;第二,它的 AI 助手不是简单的问答弹窗,而是集成在编辑菜单里,能改代码、补全代码、解释报错;第三,它提供了一套系统原生能力的 Python API,这是目前大多数同类工具不具备的。
2.1 编辑器的第一印象:完整工程管理而不是单文件
第一次打开 PyGo IDE,它的界面风格是深色主题,底部有三个标签:项目、运行、更多。项目视图里显示文件树,顶部有新建文件的按钮,支持文件夹分类。我当时第一个想法是:“这不就是 Xcode 的简化版吗?”但真正用起来后发现,它比 Xcode 轻得多。
新建一个项目时,可以选择 Python 脚本、脚本包、甚至空目录。它会自动生成一个 main.py 作为入口,还有一个 requirements.txt 文件用来记录依赖。这个设计非常对我胃口,因为很多移动端 IDE 根本不支持多文件项目,脚本一多就全堆在一层,完全没有目录概念。PyGo IDE 的工程管理虽然不如电脑上那么完备,但支持子目录、文件重命名、删除和搜索,对一个手机端工具来说已经很好用了。
编辑区的细节也到位。等宽字体、自动缩进、括号匹配、块注释,这些基础的代码编辑体验都有。键盘上方有一排快捷按键:Tab、括号、光标跳转、撤销重做,以及一个 AI 魔杖的按钮。那块屏幕本来就小,虚拟键盘又占了一半,快捷按键的存在让代码输入效率提升很多。我试过在通勤路上写完一个 80 行的脚本,虽然不如机械键盘快,但确实可行。
2.2 AI 助手不是聊天框:它嵌入在代码编辑的每个动作里
很多工具内置的 AI 助手就是一个聊天窗口,你需要把代码复制过去,它给你一段建议,你再复制回来。这种体验在手机上是灾难,因为来回切换的路径太长。PyGo IDE 的 AI 助手更像桌面版 GitHub Copilot 的轻量版,但更直接。
在编辑时,选中一段代码,弹出的操作菜单里有“解释代码”“优化代码”“生成测试”“搜索报错”四个选项。比如遇到 TypeError,我可以直接选中报错那行,点“搜索报错”,AI 会结合报错信息和上下文给出修复建议,并可以直接在下方代码上打补丁。这个“原地补丁”的交互非常关键,因为 AI 不需要生成完整代码块,而是调用了一系列编辑操作来修改选中的区域,你能清楚地看到改动的位置和内容。
我另外试过用 AI 助手进行需求描述生成代码。在编辑页面底部有一个“AI 助手输入框”,输入“读取当前屏幕亮度和电池电量,并打印”,它会生成一段基于 PyGo API 的 Python 代码,接入的正是系统原生能力模块。这种体验不光是方便,更重要的是对新手教学有帮助——你可以对照 AI 生成的代码理解系统调用流程,然后手动修改参数。
2.3 原生能力调用的抽象层:从“能用”到“好用”
PyGo IDE 最有争议也最有亮点的,是它内置的pygo模块。这个模块不是一个虚构的玩具,而是真正打通了 iOS 的沙盒边界,封装成 Python 可调用的接口。目前最常用的几类能力包括:
- 系统状态:电池电量、设备型号、当前亮度、磁盘剩余空间
- 相机与相册:拍照、从相册选图、保存图片到系统相册
- 日历与提醒事项:读取事件、创建事件、修改提醒
- 定位服务:获取当前经纬度、计算两个坐标的距离
- 文件共享:通过 iOS 的“文件”App 读取外部文件、导出文件到共享目录
这些能力都不是仿真,而是真实调用系统框架。举个例子,pygo.system.battery_level()这个函数会直接读取 iPhone 的电量百分比,返回一个浮点数。用 Python 脚本控制摄像头拍照时,会弹出系统的相机权限请求,授权后底层的取景画面会原样输出。
这一点让我非常兴奋,因为过去要在 iPhone 上实现这些功能,必须用 Swift 写一个完整的 iOS 应用,还要处理签名、证书、构建流程。现在只需在 PyGo IDE 里写几行 Python,点击运行,就能直接操作系统硬件。当然,它并不是要替代 Swift 开发,但对我们这些想快速验证自动化想法的人来说,已经是天壤之别。
3. 从零搭建复现环境:安装、配置和第一个脚本
下面进入实操部分。我会从安装开始,把每一步做什么、为什么这样做讲清楚。如果你手边有 iPhone,可以跟我一起操作。我用的是 iOS 17 系统,PyGo IDE 的最新版本。
3.1 安装包和初始设置
在 App Store 搜索 PyGo IDE,直接下载安装即可。首次打开需要允许访问“本地网络”“照片”和“文件与媒体”等权限,这些权限都可以在系统设置里按需开关。但我建议先都允许,省得调用时反复弹窗。
进入主界面后,先做三件事。第一,在“设置”里检查 Python 解释器版本,PyGo IDE 目前内置的是 Python 3.11,这个版本足够新,兼容绝大多数现代语法。第二,开启“代码补全”和“实时检查”,特别是实时检查,它会在你敲代码时即时提示语法错误,非常省眼睛。第三,把“编辑器字体”调成适合你自己视力的字号,默认字号偏小,我不推荐一上来就调特大,因为有时候代码一长需要能多看几行。
我的建议是,不要使用 iCloud 同步功能作为唯一备份方式,因为以后项目文件多了,iCloud 偶尔会同步冲突。更好的做法是配合 Git 使用,把项目托管在远程仓库,PyGo IDE 内置了基本的 Git 提交和推送功能,这样可以避免手机丢失导致代码没了。
3.2 第一个脚本:读取设备电量并发送桌面通知
我们先写一个最简单的脚本,目标是读取当前设备电量,并弹出一个系统通知。代码如下:
import pygo import pygo.system import pygo.notify battery = pygo.system.battery_level() message = f"当前电量:{battery}%" print(message) pygo.notify.show(title="电池状态", body=message)打开 PyGo IDE,新建一个项目,命名“电量监控”。把文件 main.py 里的默认内容替换成上面的代码,点“运行”。你会看到底部输出区域打印出当前电量百分比,同时屏幕顶部会弹出一条系统通知。这里注意几个细节。
第一,pygo.notify.show是一个异步 API,脚本在调用后不会阻塞,通知会立即显示。手机锁屏状态下也会展示,这为做后台提醒工具提供了基础。第二,如果你在模拟器或非真实设备上运行,某些系统 API 可能会返回模拟数据,但真机上没有问题。第三,首次运行可能会要求推送通知权限,务必允许,否则通知弹不出来。
这个脚本虽然简单,但它验证了关键的一步:Python 代码能直接和 iOS 系统服务交互。顺着这个路径,你可以做定时提醒:读取日历事件,到时间触发一个通知;也可以结合定位,判断到达某个商店后自动提醒买什么。有了第一步的验证,后面全是想象力的问题。
3.3 用 AI 助手把一段模糊需求变成可运行代码
我再演示一个更常见的场景:需求不明确,让 AI 帮你写代码。假设我想每天 9 点读取一次天气信息,然后更新到系统提醒事项里。当然,天气接口需要联网,但先不管,我们看 PyGo IDE 怎么介入。
在 AI 助手输入框里输入:“写一个 Python 脚本,每天 9 点使用系统日历创建一条提醒,标题为‘晨间天气检查’,内容为当前经纬度。使用 pygo 模块。”
AI 很快就生成了以下代码:
import pygo import pygo.location import pygo.calendar import pygo.task lat, lon = pygo.location.current_position() title = "晨间天气检查" content = f"经纬度:{lat:.2f}, {lon:.2f}" pygo.calendar.add_event( title=title, start_time="09:00", notes=content, repeats="daily" )AI 同时解释:pygo.location.current_position()会请求定位权限并返回经纬度;pygo.calendar.add_event会在系统日历中创建重复事件。它没有使用像requests这样需要联网的库作为硬依赖,也没有处理网络错误。你可以直接运行,然后打开日历查看,会发现已经多了一条每天 9 点的重复事件。
这里我想说一个体验上的关键点:AI 生成代码的最大价值不是“一次性可用”,而是它为你给出一个可调用的正确骨架。你不需要从零开始记忆 API 名称,只需要改参数、加判断逻辑。对于移动端这种键盘输入成本高的环境,AI 帮助减少的敲击量非常可观。
4. 原生能力实战:摄像头、日历、定位与文件共享
这一部分是整篇文章的重头戏。如果你还没试过用 iPhone 摄像头配合 Python,那这节能给你开眼界。
4.1 调用摄像头拍照并做本地 OCR
OCR(光学字符识别)在电脑上很常见,但在手机上通常需要专用 App。PyGo IDE 可以直接调用摄像头拍照,然后把照片交给 Python 处理。最朴素的用法是拍名片、拍身份证号码、拍作业答案。
下面是一个“拍照并打印图片拍摄时间”的简单脚本:
import pygo import pygo.camera import pygo.photo photo_path = pygo.camera.take_photo() photo_info = pygo.photo.info(photo_path) print(f"已保存到:{photo_path}") print(f"分辨率:{photo_info['width']}x{photo_info['height']}") print(f"拍摄时间:{photo_info['timestamp']}")运行后,屏幕上会弹出系统相机界面,点击拍摄,照片会被自动导入 PyGo IDE 的沙盒目录,然后脚本就能读取它的元数据。如果你需要识别文字,可以在代码中使用 Python 的 pytesseract 库,但手机端通常无法直接安装这种系统级依赖。PyGo IDE 内置了一个pygo.ocr.extract_text(image_path)的高级接口,不需要额外装包,它在本地完成识别。我在真机上跑过,对印刷体中文的识别率挺高,速度也快,大概两秒完成一张图片的识别。
4.2 读写日历事件:让 Python 当你的日程管家
日历是最适合自动化“折腾”的系统应用之一。通过pygo.calendar模块,你可以读取未来七天的事件,检查是否有时间冲突,甚至可以按关键词搜索事件列表。
下面这个脚本会打印今天的所有日程标题和时间:
import pygo.calendar events = pygo.calendar.today_events() if not events: print("今天没有日程安排") else: for ev in events: print(f"{ev['start_time']} - {ev['title']}")我实际用它做过一个“日程冲突提醒”脚本:先把未来所有事件按时间段排序,如果发现两个事件重叠,就通过pygo.notify.show弹窗提醒。写这个脚本总共没超过 20 行,但解决了我每周都要手动核对会议表的痛点。
有一点要注意:从日历读取的事件默认只包含标题、开始时间、结束时间和备注,不包含参与人列表。如果需要“参与人”字段,目前的 API 还没有覆盖。官方说明里写的是后续会补充,但不妨碍现在的核心功能。
4.3 获取位置信息并计算两个地点的距离
位置服务也是我常用的一项能力。PyGo IDE 的pygo.location.current_position()会返回一个坐标元组,配合 Python 的数学计算,可以做很多地理位置相关的小工具。
下面我写了一个“测距”脚本,计算当前位置到指定坐标的直线距离。这里用了一点球面距离公式,不需要额外库:
import pygo.location from math import radians, sin, cos, asin, sqrt lat1, lon1 = pygo.location.current_position() lat2 = 39.9042 # 示例目标纬度 lon2 = 116.4074 # 示例目标经度 def distance_km(lat1, lon1, lat2, lon2): R = 6371.0 dlat = radians(lat2 - lat1) dlon = radians(lon2 - lon1) a = sin(dlat/2)**2 + cos(radians(lat1))*cos(radians(lat2))*sin(dlon/2)**2 return 2 * R * asin(sqrt(a)) print(f"距离:{distance_km(lat1, lon1, lat2, lon2):.2f} 公里")运行后,首次会弹出权限请求,允许后会在顶部看到你当前的坐标和距离结果。我实测时发现定位精度和系统地图保持一致,这是因为底层直接调用了 iOS 的 Core Location 框架,没有自己瞎算。
这个方法适合做“附近地点”的简单脚本:比如读取一个 CSV 里的商家列表,筛选出距离你 3 公里以内的门店,再按距离排序。整个过程不需要联网,全部在本地计算。
4.4 与系统文件 App 共享文件:脚本读取文件夹
iOS 的沙盒机制一直让 Python 脚本难以访问外部文件,但 PyGo IDE 通过“文件共享”能力做了一个漂亮的桥接。在项目设置里开启“文件共享”,PyGo IDE 会在系统文件 App 中生成一个专用目录。你可以通过 iOS 的文件 App 从邮件、网盘或其他 App 导入文件到该目录,Python 脚本就能读取它们。
我常用的工作流是这样的:在电脑上生成一份 CSV 数据文件,通过隔空投送或云盘保存到 iPhone 的“文件”App,然后在 PyGo IDE 的文件共享目录里找到它,用脚本处理。
import pygo.files import csv shared_dir = pygo.files.shared_directory() csv_path = f"{shared_dir}/data/2025_orders.csv" with open(csv_path, newline='', encoding='utf-8') as f: rows = list(csv.DictReader(f)) total = sum(float(row['amount']) for row in rows) print(f"总订单金额:{total:.2f}")如果你担心沙盒路径不稳定,pygo.files.shared_directory会返回当前共享目录的绝对路径,并且每次运行都会更新。这个功能让我彻底摆脱了“把文件复制进项目”这种笨办法。
5. 通过捷径触发脚本:自动化运行的新姿势
如果你只是想点开 PyGo IDE 手动运行脚本,那还是低估了手机自动化的潜力。在 iOS 的“快捷指令”App 里,可以把 PyGo IDE 作为“脚本提供方”接入。PyGo IDE 提供了一套类似 URL Scheme 的接口,可以从快捷指令中直接运行某个脚本文件并接收输出。
这个能力适合结合“自动化”规则。比如每天早上 8 点自动运行一个“检查今日天气和日程”的脚本,把结果存成文本,再通过系统通知发送给你。创建快捷指令时,选择“App 和操作”列表中的 PyGo IDE,会看到“运行 Python 脚本”“获取脚本输出”等选项。这些不是自定义模拟,而是 PyGo IDE 暴露给快捷指令的真实操作。
我这里放一个最简单的快捷指令配置顺序:
- 选择“PyGo”作为应用。
- 操作选“运行脚本”,脚本路径填
main.py。 - 添加“显示通知”,内容设为“刚才运行的脚本输出”。
这样一来,你完全可以做到按时自动跑 Python,然后把结果推送到手机通知。对个人自动化来说,这和电脑上的 cron 定时任务有异曲同工之处,但门槛低了很多。
5. 避坑指南:在 iPhone 上写 Python 会遇到的真实问题
没有不踩坑的开发环境,PyGo IDE 也不例外。我用了几个月,踩过的坑不少,挑几个最典型的分享一下,方便后来人绕开。
5.1 后台运行与任务挂起的坑
iOS 对 App 后台运行有严格限制。当你让 PyGo IDE 退到后台,脚本如果还在执行,有时会在几十秒后暂停。特别是网络请求、文件下载这类耗时任务,很容易被系统挂起,然后恢复时抛出异常。
我的解决方案是:尽量把脚本控制在 30 秒内完成,或者把耗时任务拆成多个小步骤,通过文件记录中间状态。不要指望它像电脑一样能挂机 5 分钟。如果你确实需要长时间运行,建议配合“快捷指令”的自动化在后台调用,效果会比直接退到后台好一些。
5.2 依赖库安装的约束:纯 Python 库优先
手机端装不了所有 PyPI 库,很大一部分原因是 iOS 的编译环境不完整。所以,优先选择纯 Python 实现的库,避免依赖 C 扩展。比如网络请求用requests没问题,但lxml在安装时可能会失败,用html.parser或简单正则也可以替代。
PyGo IDE 内置了一个依赖搜索面板,可以查看某个库是否兼容当前环境。装库时最好先查一下“是否含 C 扩展”,如果包含,大概率装不上。已经踩过坑的人告诉你:不要因为换了一个小库就放弃整个方案,换个思路用纯 Python 重写几十行并不难。
5.3 屏幕小,代码补全和跳转的适配方案
手机屏幕再大也就 6 英寸出头,代码一长,滚动和定位都是负担。我的经验是不要追求“完整阅读”,而是学会用搜索和 AI 解释。PyGo IDE 的搜索功能支持当前文件的文字查找,但不能跨文件全局搜索,这是它的短板。
如果你需要在两个文件之间跳转,可以把常用函数都写在同一个文件里,或者用 AI 助手把另一个文件的代码解释给你听。很多人一开始不习惯这种工作方式,但适应之后会发现,手机代码编辑本来就是“局部修改”,不是“从零阅读”,心态转变很重要。
5.4 性能瓶颈:大型数据处理尽量分块
手机处理几十万行的 CSV 其实并不慢,但内存限制是硬伤。之前在电脑上,一个一百多 MB 的 JSON 文件加载进去没什么感觉。手机端加载同样大小的文件,直接内存飙升,App 崩溃。
我的建议是,处理大文件时用流式读取或分块读取,不要一次性 load 全部。如果你的数据超过 50 万行,优先在电脑上搞定,手机只做结果查看。这不是贬低手机性能,而是它本来就不适合做重型计算。
5.5 权限弹窗过多的一劳永逸设置
第一次使用摄像头、定位、日历、通知等功能时,系统会逐一弹窗问权限。如果你的脚本经常切换不同功能,隔三差五就要点一次,非常影响流畅性。
我的做法是:在系统“设置”中找到 PyGo IDE,把所有权限全部打开,包括定位、相机、照片、提醒事项、日历、文件和媒体。一次性授权后,后面所有脚本运行时再不会打扰你。唯一不建议开启的是“后台 App 刷新”,因为会额外耗电。
6. 我总结出的移动端 Python 工作流与适用边界
最后讲讲我的整体工作流。经过这段时间的使用,我已经形成了一套比较成熟的“手机 Python 方案”。
6.1 哪些任务适合放在手机执行
我目前放在手机上的脚本分四类:小型数据处理(CSV 合并、字段提取)、系统信息获取(电量、定位、日历)、OCR 识别、快捷指令触发的自动化提醒。重量级机器学习和爬虫完全不在考虑范围。
选择标准很简单:代码少于 200 行、依赖库不多于 3 个、单次运行时间不超过 1 分钟。只要满足这三个条件,手机端体验都不错。如果超出了,老老实实回电脑,不要勉强。
6.2 如何用 AI 助手弥补屏幕小的短板
屏幕小不是最大的问题,最大的问题是“记不住”。因为不能像电脑那样开一堆网页查文档,所以写移动端脚本时,我经常用 AI 助手来做三件事:根据需求生成初始代码、对着报错解释原因、把一段冗长代码浓缩成函数。这三步做完,代码正确率能提高 90% 以上。
尤其推荐“报错解释”功能。手机上看 Python 报错信息本来就痛苦,字体小、堆栈长。选中报错行,让 AI 解释它到底在说什么,并给出修复建议,这比自己去查文档快太多。
6.3 与电脑端的协作方式:Git 是关键
手机端的代码不能只活在手机上。我所有的 PyGo 项目都会用内置的 Git 功能推送到远程仓库,电脑端拉下来继续改。这样手机写的代码当天就能同步到工作环境,不会凭空消失。我在 PyGo IDE 里配置了 SSH 密钥和一个私有仓库,每次提交只需要三步:写 commit 信息、点提交、点推送。
如果你是刚接触 Git,建议先用最简单的方案:本地 Git 仓库 + 远程仓库镜像。日常改动频繁时,每完成一个脚本就提交一次,提交信息写清楚改了什么。这样即使手机丢失,代码照样可以恢复。
写了这么多,我知道肯定有人会说“手机写 Python 就是装样子”。但对我来说,工具的价值在于是否解决了实际的问题。我在没有电脑的场合处理过数据、记录过灵感、检查过日程,还帮同事拍过快递单直接识别成文本。PyGo IDE 不是要替代电脑,而是把手头的 iPhone 变成一台随时随地都能执行 Python 的便携终端。这种“解锁感”,用过一次就回不去了。