Python中有没有适合生产的Web应用框架?
我听说很多关于Python语言的好评。他们说它成熟、表达能力强等等……我在寻找适合生产环境的企业应用框架,具体来说,“生产环境准备好”是指:
- 支持目标关系映射,带有缓存和声明式描述(像JPA、Hibernate等)
- 支持面向控制的用户界面,不是HTML模板,而是像JSF(RichFaces、Icefaces)或GWT、Vaadin、ZK这样的东西
- 组件分解和依赖注入(像EJB或Spring)
- 单元测试和集成测试
- 良好的IDE支持
- 集群、模块化等(像Terracotta、OSGi等)
- 有成功的应用程序是由像IBM、Oracle这样的公司开发的(我指的是实际的商业应用,而不是Twitter)
- 可能有商业支持
在Python的世界里,这一切可能吗?还是说唯一的选择是:
- 使用Python,从头开始写所有东西(太贵了)
- 坚持使用Java EE
- 购买.NET技术栈
6 个回答
5
可以看看 Zope ...
15
为了让大家更明白,我在瑞士的一家大型私人银行工作,负责开发企业级应用程序,使用的是J2EE技术栈。
在Python中,有很多“可以投入生产使用”的网络框架,而且也有不少大型的Python网站。
不过,我认为Python并不是一个适合企业级应用的好选择。它可以用作粘合语言或脚本语言(我们的部署脚本就是用Python写的)。对我来说,最大的障碍是向后兼容性(Python 3.x与Python 2.x不兼容)。Python的设计理念似乎更倾向于创新和改进语言,而不是支持十年前写的程序。
在网络框架方面,我非常喜欢Django,但它确实太年轻了,发展得也太快,不适合在企业中使用。我对其他基于Python的框架没有太多经验。
如果你想要一个面向企业的框架,你还是得选择企业级技术栈(Java / .Net)。
另一方面,即使在Java的世界里,也有使用不那么企业化的框架的趋势。比如Spring和EJB2或EJB3相比,Spring要轻量得多。再比如Flex(在我看来远不是一个企业框架)在企业中的使用越来越多。所以,如果你的企业足够开放,愿意迎接未来,使用Django、RoR或其他现代的Web 2.0、社区驱动的开源框架……也许并不是那么难以接受。
最后,直接回答你提到的一些问题:
- 对ORM/缓存等的支持:是的,但大多数解决方案基于主动记录,这对于你可能想做的90%的事情来说是可以的,但绝对没有JPA/Hibernate那么全面/复杂。
- 控制导向的用户界面:没有,你找不到标准,所以也找不到第三方组件。你能找到的最接近的可能是与jQuery或其他JS UI框架的集成。
- 依赖注入:有一个Spring的Python移植版,由SpringSource维护。但依赖注入并不是Python的设计理念。这个问题可以通过函数、默认参数和闭包来解决。我们可以说,Python的解决方案比Java的方式更简洁。
- 单元测试/集成测试:支持非常好,有多个测试框架。不过,支持程度还是不如Java,因为Java周围有很多测试工具。
- 良好的IDE支持:由于动态语言的技术限制,提供的支持量是有限的,但至少Eclipse和Netbeans对Python的支持都很好。
- 集群/模块化:集群问题可以通过“无共享基础设施”和/或分布式缓存来解决。至于模块化(在OSGI的意义上),我所知道的没有解决方案。但我认为,OSGI往往是解决我们在企业中并不存在的问题的方案……