在扩展脚本方面,用户为何不太愿意接受 Python ?

2024-02-05 00:07:05 +08:00
 MegatronKing

大家好,我是Reqable的开发者,给大家分享我在推广 Python 作为程序扩展脚本时遇到的一些问题和思考。如果大家对这个方面有想法和建议也非常欢迎一起讨论,不甚感激。

先说下大体的背景,我的产品 Reqable 是 API 抓包和测试一体化工具。这一类工具基本上都会用到扩展脚本,比如 Fiddler 使用了 FiddlerScript 作为扩展脚本,Postman 和 Proxyman 等使用 Javascript 。用户可以编写扩展脚本来动态地修改请求或者响应数据,相比静态功能来说,提供了更多的可能性。

在设计 Reqable 的时候,我考虑了两种方案:方案 A 是 Javacript ,方案 B 是 Python ,最后定下来方案 B 。谈谈我当初的考虑,Reqable 本身是基于 Flutter 而不是基于 Web 引擎,如果需要支持 Javacript 需要像 React Native 一样额外引入 JSCore 来解释执行 Javacript ,技术实现上来说稍微麻烦点但难度也不大,包体积会大一些但也还好。对于 Python 而言,主流 Windows 和 Mac 上系统默认都已经预安装了,用 Linux 的基本上也会安装,所以可以直接借助用户的 Python 环境来执行脚本,不需要引入额外的库。另外,我考虑到 Python 的在用户宽度可能会更广,比如测试工程师、安全工程师、爬虫工程师等等,而 Javacript 在前端会更加流行。综上原因,最终我选择了 Python 作为扩展脚本语言。

但是想法虽好,用户却不是很买单。有些用户建议我支持 Javacript 脚本,还有一些说 Python 直接劝退。这些反馈让我不得不重新审视之前的想法,考虑是否需要增加 Javascript 作为扩展脚本。当然,维护两套扩展脚本框架我不是很情愿,这个会极大地增加后续维护和迭代的工作量。技术实现难度反而是其次,大佬 Levi 也很贴心地给我提供了他产品目前使用 Javascript 作为扩展脚本的方案: https://zhuanlan.zhihu.com/p/672772729

说回目前的困境,大家不太能接受 Python 的原因,我的个人的反思和调研出来的是以下几点:

针对这几个原因,我做了一些努力和尝试,希望能再挣扎几下:

第一点:技术栈的问题目前无解,但我还是相信 Python 的用户宽度更广。当然,如果能熟用 GPT ,技术栈也不是什么问题,直接提需求让 GPT 写。

第二点:确实是一个很大的问题,例如代码编辑器缺少代码提示和补全,调试功能不方便。针对这个问题,我完善了代码编辑器,加上了代码提示和补全功能。对于调试,则提供了日志控制台功能,当然断点调试目前还不知道怎么去支持。

第三点:对于拿来主义,我的设想是提供一个开源的公共模板仓库,将一些常用的脚本放进去,用户可以直接在 Reqable 里面 Fork 并使用。例如,我写了个利用 Python 扩展脚本自动生成并添加阿里云 OSS 资源访问的签名头部。

我暂时就想到了这么多,效果好不好目前还不确定,如果大家还有想法和见解,欢迎补充。

15495 次点击
所在节点    推广
114 条回复
nagisaushio
2024-02-05 00:14:28 +08:00
> Windows 已经预安装了
真的吗?
paulluis2dev
2024-02-05 00:24:50 +08:00
@nagisaushio bullshit ,莫非我安装的假 Windows ,10 和 11 都不预带
Cyshall
2024-02-05 00:26:37 +08:00
提一嘴,windows11 23H2 并没有预安装 python 。
MegatronKing
2024-02-05 00:28:47 +08:00
@nagisaushio 额,确认了下,这里表述可能有点问题。部分 linux 是自带的,windows 可以直接命令行跳转应用商店安装: https://devblogs.microsoft.com/python/python-in-the-windows-10-may-2019-update/ ,不过很奇怪,我记得当初调研过,在 Windows 的 C 盘某个系统目录里找到了 python3 ,找其他人确认也都有。
nagisaushio
2024-02-05 00:32:20 +08:00
@MegatronKing 我印象里 windows 是没有预装,但流行的 linux 发行版都有。但无论有没有预装,我都不建议直接调系统的 python 。一个是版本不统一,一个是装包可能打乱系统。最好还是自带运行时
MegatronKing
2024-02-05 00:36:28 +08:00
关于 windows 是否预安装的问题,再次确认了下,标准的 windows 确实没有预安装,但是根据 python 官方的说法,某些 windows 可能还是预先安装了 python 的。参考: https://docs.python.org/zh-cn/3/faq/installed.html#why-is-python-installed-on-my-machine
tcpdump
2024-02-05 00:38:21 +08:00
@paulluis2dev #2 Windows 11 电竞版 Pro Max Ultra 预装了
0o0O0o0O0o
2024-02-05 00:38:50 +08:00
- 首选 js ,你的应用可是有手机版,我不觉得在手机上写 py 体验会比写 js 好
- win11 应该是没有预装 python ,倒是有两个 python 别名会指向商店
- 其实我觉得最好还是都支持,我建议设计成未来可以灵活添加,或许还要考虑到扩展的性能问题
- 在不侵权的前提下兼容同类产品的生态
- “直接借助用户的 Python 环境来执行脚本”,安全性考虑了吗?
MegatronKing
2024-02-05 00:43:39 +08:00
@nagisaushio #5 感谢建议。我考虑过内置集成运行时,但是有个问题,不方便使用 pip3 已安装的三方库,需要再安装一遍。这个和 Javascript 作为扩展脚本是类似的一个缺点。另外,我是以 3.6 作为最低版本,版本问题应该不大。关于包管理,一般用户可能会有多个 python 环境切换,防止打乱全局的包管理。应用内是也可以配置指定 python 环境的。
d7101120120
2024-02-05 00:47:37 +08:00
作为 python 为主要语言的码农,我还是比较支持 python 作为扩展脚本的。而且单从我的感觉来说像 reqable 这种侧重于抓包和接口调试的应用的用户群体很大一部分是使用 python 作为主要语言的。

这个世界没有两全其美的方案,你做出任何决定都会有人反对的,说不定你切换到 JS 又有人说直接劝退呢?不如思考一下在如何能正确的获取到大多数用户的选择,比如在更新日志里面放一个调查问卷,甚至如果开发量能接受的话可以暂时先上两套方案后续看哪套方案是被更多用户所有接受的,不被接受的方案可以后续下掉不再维护。

当然我没有做过这种面向开发者的程序只是提一些不成熟的建议,希望对于开发者有所帮助。reqable 是一个挺优秀的应用,我从一开始推出就入正了,希望作者继续加油。

顺便乘机再提出一个无关的建议,目前 reqable 的激活是支持 windows + Linux + macOS + Android + IOS 以便于拥有多个系统的用户使用。但是对于我这种 windows(公司) + windows(家里) + Android 的人就不是很方便了,因为只能支持激活一台同种系统的 reqable 。所以我在想是否可以这样,用户可以选择将 IOS+MacOS+Linux 这三个激活资格兑换成一台 Windows 的机器的激活资格呢?当然如果不可以的话我接下来也考虑再买一个,毕竟软件还是很优秀的。
MegatronKing
2024-02-05 00:48:44 +08:00
@0o0O0o0O0o #8 感谢建议。手机版其实没提供脚本功能,我觉得应该也不会有多少用户会拿手机写脚本吧。直接借助用户的 Python 环境来执行脚本,这方面安全性考虑确实没有考虑到,请教下是指哪方面的安全性呢。
MegatronKing
2024-02-05 00:54:41 +08:00
@d7101120120 #10 谢谢,很中肯。关于许可证的问题,我也考虑到了。大概在春节之后上线,现有的用户会额外送一个设备位置,不需要再买了: https://github.com/reqable/reqable-app/issues/436
paulluis2dev
2024-02-05 00:57:06 +08:00
@MegatronKing 建议结合原文英文版查看,中文版翻译并不十分准确,原版并没有表达预装的意思
cwcc
2024-02-05 00:58:24 +08:00
我不知道 Python 有没有实现过 ABI ,或许可以考虑编译一个 libpython (其他主流解释型语言也基本都有 libxxx 二进制版本),然后 Dart 调用 FFI 来实现对接 Python 等其他语言,这样系统不需要安装 Python 了,不过就是需要重新静态编译一遍所有需要的库。但我觉得既然你的产品要集成 python ,安装默认以外的 pip 包本来就是非预期行为我觉得可以不考虑进去,这样或许真的是一种可行的方案,而且不会在系统里拉其他文件。
我搞过 libphp ,最后 frankenphp 的出现也证实了这是一种可行的将脚本语言融合到其他语言中的方式。
paulluis2dev
2024-02-05 00:58:30 +08:00
@tcpdump 这个版本是个人封装的吗
angrylid
2024-02-05 01:00:11 +08:00
可是 Python 不就是缩进版 JavaScript 吗🤔
MegatronKing
2024-02-05 01:02:30 +08:00
@cwcc #14 我调研过是可以的,android 都能跑 python
vvhy
2024-02-05 01:10:36 +08:00
@MegatronKing #11 那个是假的🤣,是个 placeholder
shuimugan
2024-02-05 01:59:49 +08:00
当用户在各种平台讨论并贴出一段测试用的脚本时,你无法预估平台会对代码做什么格式化处理,如果是 python 脚本这种强缩进相关的,随便一个缩进错乱就搞得脚本出错了。我已经见过好多例新手因为缩进问题搞出的低级 bug ,你这种半成品编辑面板,就是让用户在外面写好之后再复制进去的,更容易出问题了。
wjfz
2024-02-05 02:06:47 +08:00
反馈一个问题,上次在论坛看到的时候试着装了下。M3 Pro ,安装证书之后,点开启系统代理,然后自动又停了,开关状态灭了。再点开启,又自动关了。当时有点忙就直接卸了,辛苦楼主可以排查下,或者我过阵子再下载下来试试。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1014257

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX