吐槽python,以及新的python web后端框架

Web 编程语言编程语言吐槽后端框架
浏览数 - 110发布于 - 2025-11-23 - 00:52

前言

之前学过用Django来写后端,整体来说还算好用,但是还是花了好几天,Django的用法以及配套的DRF。  

写了一个简单的项目后,几乎是再也没拿起过这个框架。  

其中一个原因是这个框架太重了,有点java里面springboot的那种感觉,就是写一个demo需要配置一大堆东西,就感觉心累。  

于是乎去找几个新的,更先进的框架。  

列表

fastapi

之前面试过一家公司,说他们后端用的fastapi。  

其实稳妥来说用这个没啥问题,足够热门足够轻量。  

但是我就是喜欢搞点新的东西,而fastapi出现得很早,算不上先进。  

Litestar

litestar-org/litestar: Light, flexible and extensible ASGI framework | Built to scale

Litestar被称为进化版的fastapi

image.png

整体来说没遇上什么大问题。  

就是这个litestar run,默认是运行当前目录的app.py,而使用uv init创建的项目,主程序入口是main.py,让人产生了一些困惑。  

另外就是这个route_handlers让人感觉有些蠢,不够简洁。  

也没有自动推断,写python还必须声明返回值,不写就不让运行,于是还是觉得蠢。  

Robyn

sparckles/Robyn: Robyn is a Super Fast Async Python Web Framework with a Rust runtime.  

这个是最有槽点的,容我娓娓道来。  

  1. 创建项目

    shell
    uv init xxx
    uv add robyn
    

到这其实就出问题了,首先需要rust环境,于是在windows上,需要安装rustup工具链。  

shell
winget install --id Rustlang.Rustup

我没记错的话,rust构建还依赖于c++构建工具,因此在windows上需要安装微软的Build tools。  

image.png

这些还好接受,之前尝试tauri的时候有被恶心过。  

于是跟着官方文档,开始第一个demo应用。  

python
from robyn import Robyn

app = Robyn(__file__)

@app.get("/")
async def h(request):
    return "Hello, world!"
app.start(port=8080)
shell
python -m robyn .\main.py

然后还是没跑起来,报错一大段,大致分析了一下,是python版本高了,不兼容。  

前段时期,python升级到了3.14版本,具有`πthon`彩蛋。

毕竟是近期更新的,不兼容可以理解,降呗。  

uv我也不是特别熟,降级还略麻烦。  

shell
# 先尝试
uv venv --python 3.13
# 然后测试版本
python --version
# > 3.14
# 反正没成功,后续在pyproject.toml中删除了指定python版本的字样
# 又删除了.venv目录,再次执行上面的命令,这才更换成功。  
# 于是乎我又尝试运行
python -m robyn .\main.py

然而默认不是以开发模式运行的,这一点也挺难让人理解,而且文档里面指引也不是开发模式。  

这一点就不如前端,人家至少知道要先开发才能部署,甚至有些脚手架默认自动打开浏览器

image.png> 强调这一点的原因是,开发模式具有热重载(在此处是热重启),可以检测代码的更新然后自动重启服务,提升开发效率。  

ts生态里面HMR秒了。  

shell
python -m robyn .\main.py --dev

而且前面没提这个robyn文档里面的运行命令参数也是执行不了。  

shell
> (other) PS D:\code\other> python .\main.py --dev
> Dev mode is not supported in the python wrapper. Please use the Robyn CLI. e.g. python3 -m robyn app.py --dev

然后自然也是出问题了。这次没看懂什么意思,直接扔给AI了,于是乎人家说,watchdog(掌管热重启功能的模块)不适配当前python版本。也是非常woc。  

最终换到的3.12版本,也是成功运行了。  

别的没啥可说的,自带一个docs,还不错。  

image.png

最后

文档也是非常搞笑,推荐你使用最新版本。  

image.png

granian

emmett-framework/granian: A Rust HTTP server for Python applications  

这个框架我没有尝试,这玩意也是rust写的,stars数比robyn更少,但是知名度更高,因为出来得早。  

python吐槽

前面都在说web框架,标题上的吐槽python呢?  

我不知道我以前是为什么能忍受python的。  

python的包管理工具,即使是uv,也完全不够好用,在我看来完全比不上pnpm之类。  

python的第三方包里面有不少包并不是纯python的,假如接触过某些开源项目,想把他跑起来,多少有些费劲。  

以llamafactory为例,你想把这玩意跑起来并不简单。  

当时我为了追求先进的包管理工具,强行使用uv去跑这个项目,结果就是搞半天搞不出来。  

于是乎后面换了conda,情况好了很多。(就是因为conda并不是纯python的包管理工具,而且conda有预编译包,省很多事)。  

然而在windows上,搞这玩意依旧恶心,因为有某个依赖对windows支持不太好,甚至很多教程是在WSL里面去跑项目。  

我自然是不服气,花了很多时间搞这玩意。

  • 糟糕的跨平台,语言跨平台,我的包不跨平台,windows能跑的应用,我放到Linux上不能跑,需要换其他包。

    这一点rust也是,rust要跨平台需要到目标平台上编译,因此就有了使用github actions来构建多平台包的用法。然而那个actions已经被标记为归档,不再更新,只是恰好还能使用。  

    与此相比,go语言跨平台真是爽,我在windows x86上成功编译出linux arm64的二进制可执行文件,并在安卓手机的Termux终端环境下执行

  • 混乱的包管理。nodejs发展到现在,包管理器有不少,npm、yarn、pnpm、bun。

    然而在python里面,包管理乃至项目管理工具有一大堆。  

    除了uv,目前还有几个新兴的管理工具,比如PDM。  

  • 历史遗留问题

    比较反直觉的是,Python是一个非常古老的编程语言。  

    Python比Java出现得更早。(即使有很大一部分观点认为应当将python3划为新的语言,这就纯扯皮,那Java 21和Java 8差别也大了去了)  

    这方面细化有很多可说,比如第三方包对异步的支持、python新版本的破坏性更新。  

    有不少项目甚至指明了需要使用哪个python版本来运行。  

    解决python依赖冲突和解决Linux环境依赖冲突有的一拼。  

    还有就是类型标注,typescript发展得很早,而且vscode和typescript都是微软开发的,推广起来非常轻松,到现在js已经完全是ts的形状了。然而python的第三方包不管你这那的,有标注算你先进,没标注你也不能拿我怎么样(总之就是质量层次不齐)。  

    而且类型推断完全一坨,完全比不上ts(有个好爹就是不一样)。

    沟槽的缩进

    饺子醋这一块。  

    缩进在某些层面很好,它以最简洁的方式来提供信息(在很多语言中,缩进不具有意义,然而在python中具有,这使得python更加简洁)。  

    然而,缩进妨碍我粘贴代码了。  

    这自然不是我第一次发现它对粘贴代码的影响,我也不知道我怎么忍下来的。  

    复制一段代码然后粘贴到方法里面,按下格式化按键。  

    image.png我一直崇尚简洁,于是乎在试用vscode insiders时,我使用了insider的配置(空的)。  

    于是在看到这玩意时,第一反应就是很烦(无论是需要点一下安装,还是意识到就算格式化也没有用)。  

总结

文章的主要篇幅是一个踩坑记录,最终得出的是一个无用的结果。  

无论最终结果是否有益,唯一确信的就是这些尝试拓宽了我的眼界,引起了我的思考,尽管这些东西难登大雅、微不足道。

(那些小众的编程语言 - 摸鱼派)[https://fishpi.cn/article/1735655919063]  

另外之前还探究过前端测试工具,比如Puppeteer、Playwright、Cypress这些,最终得出的结论是完全没有必要,编写成本还是高,并且引入了不必要的复杂性。除非是专业的测试人员,否则没有必要。  

本文版权遵循 CC BY-NC 协议 本站版权政策

1 条回复

鲲

6643

#1
发布于 2025-11-23 - 06:38

我推荐 fastapi,生态稳定上手好写体验也可以,中小型项目用用问题不大

js 它本来就是弱类型语言,虽然有适合它的地方比如报错也无所谓的前端,但是类型这方面,需要 ts 说明这是这个语言本身的问题,弱类型才需要类型,类型设计的不好才需要用体操来弥补,所以说 ts 方便的代价就是昂贵的报错和难看的体操,以及天生就很烂的性能,不过这并不妨碍它确实很好用

(。>︿<。) 已经一滴回复都不剩了哦~