用脚投票,Python Web 框架最新排名出炉

CentOS 7 常用命令大全 CentOS中Linux命令 阅读详情

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

最近有人抓取了 Github、Stack Overflow、PyPI 上的数据,根据开发者在这些平台上的实际使用行为,对目前的 Python Web 框架进行了排名。这个排名不是基于性能来排序的,但整体我认为其实更综合一些,是大家“用脚投票”选出来的。

在今天的文章里,我想和大家分享这份榜单,以及从中获得的一些启示。

一、具体名单

排名前十五的框架名单如下:

详细数据可查看:https://e8q41pfxni.feishu.cn/sheets/shtcnJFBSG220Q8VfSnX6BUyjae?from=from_copylink

二、排名算法

框架得分计算方式比较简单:

1、首先逐一计算每个指标的得分,具体方法如下:

1)抓取框架对应指标的数据;

2)将该指标的数据从低到高排序

3)指标得分就是框架的序号

2、将每个指标的得分相加,并除以指标的数量,简单说就是求平均值

3、最后将得分转换成百分制,就得到了最终分数

二、榜单启示

我没有太细究数据背后的一些原因,这里仅仅跟大家分享3点观察和启示。

1、Django 仍占主流,但在被 Flask 和 aiohttp 追赶

从最新抓取的数据可以看到,在开发者使用率(PyPI项目主要依赖数,即该框架被多少项目引入作为主要依赖)、社区活跃度(SO问题数、Github星标数、Github贡献者数)方面,仍然排在首位。

这里当然有 Django 功能强大、完备这方面的因素,但是我认为,发展早这个也是它能有如此积累的一个重要原因。

Flask 作为后起之秀,在PyPI项目主要依赖数和Github星标数这两个指标上,已经基本上和 Django 不相上下了。尤其是后者,是最近几年迅速增长起来的。

而且 Flask 和 aiohttp 的下载量远远超过了 Django。

2、异步框架逐步受到大家的欢迎

aiohttp、sanic 等都是原生支持异步调用的,aiohttp 在各项指标上的表现都不错,排在前列,尤其是 PyPI 上的下载量超过了2500万;sanic 目前看上去在开发者中的接受度较一般,在 SO 上的问题数偏少,不到 200 条。

另外,Django 老大哥在 3.0 版本中也加入了 ASGI 的支持。

3、Web 框架中垂直类开始崛起

这里的垂直类框架,我指的是 FastAPI 和 Dash。

FastAPI 是专门用于开发 Rest 服务的框架,国内有很多 Python 自媒体都发文推荐过,性能表现非常优秀,可以媲美 NodeJS 和 Go。

Dash 是 Plotly 出品专门用于开发数据可视化应用的框架,基于 Flask、Plotly.js 和 React.js 打造,但是在编码的时候,可以只使用 Python 来实现。

这两个框架的排名都比较靠前,数据表现很好。

尤其要说明的是 Dash 的势头很强,最近一个月仅靠 4 名贡献者就更新了超过 10 万行代码,背后一个重要的原因是它背后有商业化力量在推动。Dash 是 Plotly 公司基于 Plotly.js 打造的,虽然开源,但是还提供了针对企业的私有部署服务。所以它有很强的动力来推广 Dash。

整体来说,我觉得 Python Web 框架生态是越来越繁荣了,对于广大的开发者来说是特别棒的一件事情。

上面也只是我一些不成熟的看法,欢迎大家留言一起分享自己的观点。如果你有用的不错的Web 框架,也欢迎在留言里向大家推荐。

—END—

文末再和大家推荐一下我自己组织的英文图书共读营,首期读的就是一本关于 Django 3 的英文原版书。共读营原价199元,公众号读者可以限时优惠 130 元,仅需 69 元即可参与。


题图:pexels,CC0 授权。

从零实现Unitree Go2的SLAM建图与导航:手把手集成slam_toolbox和nav2(附Rviz2可视化配置) 本文详细指导如何在Unitree Go2四足机器人上集成slam_toolbox和nav2,实现SLAM建图与导航功能。从ROS2环境配置、雷达数据处理到slam_toolbox参数优化,再到nav2路径规划与Rviz2可视化调试,提供完整解决方案。特别适合机器人开发者快速掌握ROS2导航栈在Unitree Go2上的应用实践。 阅读详情

相关推荐

信息收集-服务器信息

服务器上面可以运行大量的系统服务和第三方应用服务,如果操作系统或者第三方软件没有及时升级打补丁,攻击者就有可能直接通过服务器上运行的服务进行攻击。

weixin_49349476的博客 1446

【Web后端架构】2022年10个最佳Web开发后端框架

这些都是2022年在Java、Ruby、Python、JavaScript、PHP、Scala和Golang中进行web开发的最佳后端开发框架在本文中,我将与您分享创建web应用程序的10个最好的后端框架。Web开发通常分为两类:前端开发和后端开发。后端开发人员负责构建web应用程序的服务器端。当前端部分与用户交互时,后端部分负责内部工作。如果没有后端,前端可能会工作,也...

全网:架构师研究会 1万+

【电驱动】永磁同步电机工作原理及分类

永磁同步电机工作原理及分类

星Yeah 的博客 7336

TechEmpower 21轮Web框架 性能评测 -- C# 的性能 和 Rust、C++并驾齐驱

Techempower benchmark是包含范围最广泛的web框架性能测试,覆盖了比较典型的使用场景,其可参考性极强。另外,所有测试源代码和软硬件配置都开放,基本得到大家的认可。

shanyou的专栏 5735

记一次使用STM32F042K6芯片内部HSI48M时钟导致CAN总线报错问题

深入去解决某个问题时,也会加深你对其它部分的了解和思考,比如这里让我又重新了解和CAN的采样点和CAN报错机制。

ApexYuan 861

从零到一:Quartus II连接开发板实战,打通绘图、管脚分配、编译与下载全链路

本文详细介绍了使用Quartus II软件连接FPGA开发板并完成首个项目的全流程。从硬件连接到驱动安装,到绘制电路框图、精准分配管脚,再到编译设置与最终下载,手把手指导您打通从设计到硬件实现的完整链路,是FPGA初学者的实战入门指南。

mqtt6iot的博客 717

目前最受欢迎的12个Python web框架,你用过几个?

Python作为胶水语言,随AI时代来临备受追捧。其发展方向有很多的,比如:爬虫、数据分析、自动化测试、人工智能、运维还有web开发等。 Python程序员有很多很好的选择来创建Web应用程序和API;Django,Weppy,Bottle和Flask引领潮流。 如果正在开发一个Web应用程序并且已经选择使用Python作为构建它的语言,那么这是一个明智的选择。Python的开发成熟度,强大的库以及广泛的实际应用使其成为Web开发的必需。

libaiup的博客 6216

使用podman 容器化安装DIFY

本文阐述了使用podman容器化安装DIFY的过程

wengad的博客 1902

最受欢迎的前端几大UI框架

在前端项目开发过程中,总是会引入一些UI框架,已为方便自己的使用,很多大公司都有自己的一套UI框架,下面就是最近经常使用并且很流行的UI框架。 一.Mint UI 屏幕快照 2019-01-18 下午3.03.59.png Mint UI是 饿了么团队开发基于vue .js的移动端UI框架,它包含丰富的 CSS 和 JS 组件,能够满足日常的移动端开发需要。 官网:https://...

前端视听 7633

Unity XR Interaction Toolkit(二)手柄交互

XR Interaction 手柄事件和抓取设置

qq_36608844的博客 8497

《QGIS快速入门与应用基础》021:插件仓库 URL 获取与添加

详细介绍了在QGIS中添加第三方插件仓库的方法。首先强调必须从官方推荐、开源社区等可靠渠道获取插件仓库URL以确保安全性,并列出了4类可信获取渠道。文章分步骤讲解了URL添加流程,包括打开插件管理器设置面板、填写仓库信息、刷新缓存验证等操作。针对常见问题如URL格式错误、连接失败等提供了具体解决方案。最后总结指出,成功添加第三方仓库后即可直接搜索安装各类专业插件,从而扩展QGIS功能边界。全文注重实操指导,特别适合需要安装行业专用插件的QGIS用户参考。

LuckyHanMo的博客 467

【Web后端架构】2023年10个最佳Web开发后端框架

这些都是2023年在Java、Ruby、Python、JavaScript、PHP、Scala和Golang中进行web开发的最佳后端开发框架在本文中,我将与您分享创建web应用程序的10个最好的后端框架。Web开发通常分为两类:前端开发和后端开发。后端开发人员负责构建web应用程序的服务器端。当前端部分与用户交互时,后端部分负责内部工作。如果没有后端,前端可能会工作,也可能无法工作,但要创建一个...

全网:架构师研究会 5257

【WRF-Urban数据集】中国60个城市的1 km分辨率城市冠层参数(UCPs)

中国60个城市的1 km分辨率城市冠层参数(UCPs)

WW、forever的博客 1069

FastAPI获年度第一新兴框架,2021年最受欢迎的TOP 100开发工具出炉

2021开发者工具Top100

qq_43529978的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

​Rust最受喜爱却少有人用,Python仅排第六,2021全球开发者调查报告出炉

来源:机器之心 本文约2100字,建议阅读8分钟当前最受开发者喜爱的编程语言是 Rust 语言,而 Python 的受喜爱程度仅位居第六。 在最近出炉的 Stack Overflow ...

数据派THU 490

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Rust 最受喜爱却少有人用,Python 仅排第六,2021 全球开发者调查报告出炉

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !在最近出炉的 Stack Overflow 全球开发者调查报告中,Rust 成为最受开发者喜爱的编程语言,...

easylife206的专栏 1152

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Rust最受喜爱却少有人用,Python排第六,2021开发者调查报告出炉

在其他框架和库排名中,.NET Framework 最受欢迎,其余依次为 NumPy、.NET Core / .NET 5、Pandas 和 TensorFlow。

akysc1的博客 92

Python仅排第六,2021全球开发者调查报告出炉,排第一竟然是它?

机器之心报道机器之心编辑部在最近出炉的 Stack Overflow 全球开发者调查报告中,Rust 成为最受开发者喜爱的编程语言,Python 语言受开发者喜爱程度仅排第六。但是,备受好...

程序IT圈 286

Rust最受喜爱却少有人用,Python仅排第六,2021全球开发者调查报告出炉

报道来源:机器之心在最近出炉的 Stack Overflow 全球开发者调查报告中,Rust 成为最受开发者喜爱的编程语言,Python 语言受开发者喜爱程度仅排第六。但是,备受好评的 R...

Python数据之道 388

Redis能干啥?细看11种Web应用场景

本文转载至:http://blog.youkuaiyun.com/u014386474/article/details/51838190 下面列出11种Web应用场景,在这些场景下可以充分的利用Redis的特性,大大提高效率。 1.在主页中显示最新的项目列表。 Redis使用的是常驻内存的缓存,速度非常快。LPUSH用来插入一个内容ID,作为关键字存储在列表头部。LTRIM用来限制列表中的项

韶shls的博客 372

2012年12月编程语言排行榜:Objective-C风暴来袭(1)

【51CTO独家特稿】2012年12月TIOBE编程语言排行榜又出炉了,这次的排行和上个月没有太大的变化。也许在你的意料之中,Objective-C不断的继续上升。而其他主流的移动应用编程语言,如C,C++和Java都在上涨,但速度缓慢,很明显不能与Objective-C竞争。 从Web编程语言来看,Python与Ruby也是一直属于增长的状态,不过提升相对来说比较慢。但值得关注的是以这样的趋势...

web开发自学 180

互联网摸鱼日报(2022-09-13)

InfoQ 热门话题 开源中国资讯 Elastic日报 第1498期 博客园新闻 36氪新闻

weixin_43849685的博客 589

热门编程语言那么多,该选择哪个

告诉你该如何热门编程语言选择

m0_69234258的博客 815

web框架速度排序Web Framework Benchmarks

第一名的是mormot [async],看着是delphi的中间件。fastapi排20,相当不容易了!去年10月的web框架速度排序。

skywalk8163的专栏 1418

python web开发框架有哪些,python web前端开发框架

优 点:Web2py 是一个用 Python 语言编写的免费的开源 Web 框架,旨在敏捷快速的开发 Web 应用,具有快速、可扩展、安全以及可移植的数据库驱动的应用,遵循 LGPLv3 开源协议。Web2py 提供一站式的解决方案,整个开发过程都可以在浏览器上进行,提供了 Web 版的在线开发,HTML 模版编写,静态文件的上传,数据库的编写的功能。优 点:Starlette 是一个轻量级的 ASGI 框架 / 工具包,非常适合构建性能异步服务,它是生产就绪的,并为您提供以下内容:令人印象深刻的表现。

2301_81895949的博客 3897

“2024年最流行的10个前端框架”

​ 如今市场上有很多前端框架,其中大多数都运行在 JavaScript 上。前端开发人员总是争论他们选择的最佳框架,这就是为什么您需要了解它们的功能,以便能够选择一个适合您开发 Web 应用程序的需求。为此,下面对2024年最高效、最突出、最易用的前端框架进行了详细比较。 ​

m0_72934718的博客 1万+
上一篇: 命令行里还能做可视化?!这些 Python 库太酷了!
下一篇: 导弹如何自动追踪目标?这其实是个数学问题
codingpy
博客等级 码龄11年 1873粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值