Python 缺少一个类似 Spring Boot 的通用应用程序框架? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
RockChinQ
V2EX    Python

Python 缺少一个类似 Spring Boot 的通用应用程序框架?

  •  1
     
  •   RockChinQ
    RockChinQ 2023-12-06 22:37:39 +08:00 3790 次点击
    这是一个创建于 745 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一些个人的浅见,想听听大家的看法或者实践。

    最近两年做了几个比较实用也稍微有点热度的项目,在某些组件重构了很多次之后发现:

    • 需要自己组织程序内多个组件(数据库接口、HTTP API 、其他逻辑)
    • 配置文件需要自己实现和管理
    • 依赖注入之类的组织方式需要自己实现

    最近浅看了一下 Spring Boot 教程之后,发现 Spring Boot 能较好地解决了上述几个问题(自动装配、MVC 分层、统一配置文件),这让新手能很轻松地构建一个架构行得通的程序,对比之下 Python 由于语法过于灵活,容易写得很乱。然后就思考一下几个问题:

    • Python 教程似乎都没有讲解构建一个多组件应用程序时的一些最佳实践?
    • Python 的框架似乎都很“专业”:做 Web 的 Flask 、Django ;做 GUI 的 Tkinter 、PyQt ,但似乎没有一个框架能直接通过框架的形式提供最佳实践方案?
    • 其他的 Python 程序员做这种有多个组件的应用时是如何组织多个组件的?

    第一次发帖,希望能听听其他人的见解。

    12 条回复    2023-12-13 18:41:40 +08:00
    RockChinQ
        1
    RockChinQ  
    OP
       2023-12-06 23:36:11 +08:00 via Android
    可否有这样一个框架能让 Python 新生少走弯路?使 Python 适应较大的应用开发?目前是否有这个需求呢?
    yyfearth
        2
    yyfearth  
       2023-12-07 04:00:11 +08:00
    Spring Boot 也没有 Desktop GUI 的吧
    Spring 倒是和 Django 有点类似
    dayeye2006199
        3
    dayeye2006199  
       2023-12-07 05:22:01 +08:00
    django 表示 那我是干什么的?

    如果 django 都嫌臃肿的话,那 sprintboot 是啥?

    python 很多时候不需要 DI ,因为语言特性足够灵活,完全可以绕过去。
    sordidclown
        4
    sordidclown  
       2023-12-07 08:42:19 +08:00
    结合我个人的体验来说,OP 的这个问题的一部分是不是能归结为 Python 缺乏像 Java 一样通用的工程化准则?但是在类型注解出现之前,鸭子类型的语言本身就不太适合做工程,所以其实最后的落点反而是用 Python 做工程的人相对较少(?),相对来说,分享这方面经验的也少,最后都需要自己摸索。但其实如果要学习如何组织,其实可以看看开源的库,或者从其他语言借鉴(狗头)。之前找这方面的时候找到了一个项目: https://pyloong.github.io/pythonic-project-guidelines/
    顺带一提,如果想同时 Web 和 GUI 开发,题主可以考虑下 Flet ,现在最新版已经提供了 Webview ,大部分情况下应该够用了。
    RockChinQ
        5
    RockChinQ  
    OP
       2023-12-07 09:18:56 +08:00 via Android
    @dayeye2006199 Django 似乎可以满足部分需求,我再去了解一下。我的意思是,在构建一定规模的应用时,Python 的高灵活性是一项缺点,因为一种需求可能的实现不唯一,造成可读性较差,受程序员个人水平影响严重。如果有一个统一的框架,提供一种最佳实践抹平程序员水平间的差异就好了。我再去了解一下 Django 。
    RockChinQ
        6
    RockChinQ  
    OP
       2023-12-07 09:23:50 +08:00 via Android
    @sordidclown 对的,我和你的想法基本一致,我现在写函数参数、类成员都会习惯加上 type hints 。我去看看你给的链接。并不是要做 web 和 gui ,一开始的 po 出的框架只是想说明目前的框架都比较关注单独一个组件的功能。
    flmn
        7
    flmn  
       2023-12-07 10:41:57 +08:00
    Django
    roundgis
        8
    roundgis  
       2023-12-07 16:59:46 +08:00
    要在大目用 python 。人有一定要求。
    RockChinQ
        9
    RockChinQ  
    OP
       2023-12-07 17:41:07 +08:00
    @roundgis 可以详细说一下吗?以及你自己的经历?
    ZX576
        10
    ZX576  
       2023-12-13 18:29:44 +08:00
    @RockChinQ

    提供一种最佳实践抹平程序员水平间的差异就好了 -
    ZX576
        11
    ZX576  
       2023-12-13 18:41:21 +08:00
    @RockChinQ

    提供一种最佳实践抹平程序员水平间的差异就好了 -> 不太可能,以 django 为例,且不说 type hints ,写接口用 def 还是 class 都无法统一起来。

    纵观 V 站、知乎之类的问答,各类程序员(包括 Pythonista )愿意把 Python 代码当维护的工程来写的都很少。社区自己也摆烂,type hints 和 asyncio 出了多少年了,django 至今不充分跟进。django 的结构就是大工程应用的解法,奈何 django 自己不努力,而现在流行的 fastapi 基于 starlette 改,人家就没想做大工程,定位就是出三两个接口,爽完了事。
    ZX576
        12
    ZX576  
       2023-12-13 18:41:40 +08:00
    @RockChinQ

    “提供一种最佳实践抹平程序员水平间的差异就好了” -> 不太可能,以 django 为例,且不说 type hints ,写接口用 def 还是 class 都无法统一起来。

    纵观 V 站、知乎之类的问答,各类程序员(包括 Pythonista )愿意把 Python 代码当维护的工程来写的都很少。社区自己也摆烂,type hints 和 asyncio 出了多少年了,django 至今不充分跟进。django 的结构就是大工程应用的解法,奈何 django 自己不努力,而现在流行的 fastapi 基于 starlette 改,人家就没想做大工程,定位就是出三两个接口,爽完了事。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2453 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 02:34 PVG 10:34 LAX 18:34 JFK 21:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86