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 · 2833 次点击
    这是一个创建于 384 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    • 需要自己组织程序内多个组件(数据库接口、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   ·   实用小工具   ·   5718 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:03 · PVG 11:03 · LAX 19:03 · JFK 22:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.