Python适用于大型软件项目(不是基于Web的)吗?

时间:2008-08-30 07:08:23

标签: python ide

现在我主要用C / C ++开发,但我在Python中编写了一些小实用程序来自动执行某些任务,我真的很喜欢它作为语言(尤其是生产力)。

除了性能(由于易于将Python与C模块连接起来,有时可以解决这个问题),您是否认为在开发独立的复杂应用程序时适合生产使用(例如,考虑到文字处理器或图形工具)?

你会建议什么IDE?在我看来,即使对于小型项目,用Python提供的IDLE还不够。

13 个答案:

答案 0 :(得分:32)

我们已经使用IronPython来构建我们的旗舰电子表格应用程序(40kloc生产代码 - 它是Python,IMO意味着每个功能的loc很低)Resolver Systems,所以我肯定会说它已经准备好用于生产复杂的应用程序。

有两种方法可能对您没有用处: - )

  1. 我们使用的是IronPython,而不是更常用的CPython。这为我们提供了使用.NET类库的巨大优势。我可能会在这里惹火,但我会说我从来没有真正看到过看起来“专业”的CPython应用程序 - 因此访问WinForms小部件集对我们来说是一个巨大的胜利。如果我们需要提升性能,IronPython还为我们提供了能够轻松进入C#的优势。 (虽然老实说我们从不需要这样做。迄今为止我们所有的性能问题都是因为我们选择了愚蠢的算法而不是因为语言很慢。)使用来自IP的C#要容易得多而不是为CPython编写C扩展。
  2. 我们是一家极限编程商店,因此我们在编写代码之前编写测试。如果不首先编写测试,我不会用动态语言编写生产代码;缺乏编译步骤需要由某些东西来涵盖,正如其他人所指出的那样,没有它的重构可能很难。 (Greg Hewgill的回答表明他遇到了同样的问题。另一方面,我认为如果不首先编写测试,我不会用任何语言编写 - 或者特别重构 - 生产代码 - 但是YMMV。)
  3. Re:IDE - 每个人都使用他们喜欢的文本编辑器,我们一直很好;如果你喜欢更重量级的东西,那么WingIDE就非常受欢迎了。

答案 1 :(得分:23)

你会找到两个答案 - 宗教的一个(是的!当然!这是有史以来最好的语言!)和另一个宗教的一个(你一定是在开玩笑吧!Python?不......它还不成熟足够)。我可能会跳过最后的宗教信仰(Python?!使用Ruby!)。一如既往,事实并非显而易见。

优点:它简单易读,包含电池,几乎所有内容都有很多好的库。它的表现力和动态类型使其在许多情况下更加简洁。

缺点:作为一种动态语言,有更好的IDE支持(正确的语法完成需要静态类型,无论是在Java中显式还是在SML中推断),其对象系统远非完美(接口,任何人?)并且很容易得到混乱的代码,其中的方法返回int或boolean或object或者在未知情况下返回某种类型。

我的观点 - 我喜欢Python的脚本,自动化,小型webapps和其他简单明确的任务。在我看来,它是迄今为止这个星球上最好的动态语言。也就是说,我从不使用任何动态类型语言来开发大量应用程序。

说 - 将它用于Stack Overflow会很好,它有三个开发人员,我想不超过30k行代码。对于更大的事情 - 首先你的开发速度会非常快,然后一旦团队和代码库增长,事情就会比使用Java或C#更慢。您需要通过编写更多单元测试来抵消编译时间检查的缺失,重构变得更难,因为在您运行所有测试甚至整个大型应用程序之前,您永远不会知道您的refacoring是什么破坏了。

现在 - 决定你的团队将会有多大以及应用程序完成后应该有多大。如果您有5个或更少的人,并且目标大小大致是Stack Overflow,请继续,使用Python编写。您将很快完成并对良好的代码库感到满意。但是如果你想写第二个谷歌或雅虎,那么使用C#或Java会更好。

关于你提到的C / C ++的附注:如果你不是在编写性能关键软件(比如大规模的并行光线跟踪器,它会运行三个月来渲染一部电影),或者是一个非常关键的系统(比如火星着陆器会飞连续三年并且只有一次机会降落或者您损失了4亿美元)不要使用它。对于网络应用程序,大多数桌面应用程序,大多数应用程序通常不是一个好的选择。您将在复杂的业务逻辑中调试指针和内存分配。

答案 2 :(得分:18)

在我看来,python已经为开发复杂的应用程序做好了准备。我认为服务器端的pythons强度比编写图形客户端更强。但请看http://www.resolversystems.com/。他们使用.net ironpython端口在python中开发了一个完整的电子表格。

如果您熟悉eclipse,请查看pydev,它提供了对所有其他eclipse好东西(如svn支持)的python的自动完成和调试支持。开发它的人刚刚被aptana买下,所以这将是未来的坚实选择。

@Marcin

  

缺点:作为一种动态语言,有办法   更糟糕的IDE支持(正确的语法   完成需要静态输入,   无论是在Java中显式还是推断   在SML),

你是对的,静态分析可能无法为动态语言提供完整的语法完成,但事实上pydev很好地完成了工作。在编写python时,我有更多不同的开发风格。我总是打开一个ipython会话并使用一个F5我不仅可以从ipython中完美地完成,而且还可以进行对象内省和操作。

  

但是如果你想写第二个谷歌   或雅虎,你会好得多   C#或Java。

Google just rewrote jaiku在App Engine上工作,所有这些都在python中。据我所知他们在google中也使用了很多python。

答案 3 :(得分:13)

我真的很喜欢python,这些天我通常选择的语言是我自己做的小(非gui)的东西。

但是,对于我已经解决过的一些较大的Python项目,我发现它与编写C ++的程序并不完全相同。我正在研究语言解析器,需要在Python中表示AST。这当然属于Python可以做的范围,但是我在进行一些重构方面遇到了一些麻烦。我正在改变我的AST的表示并改变方法和类很多,我发现我错过了在C ++解决方案中可用的强类型。 Python的鸭子打字几乎灵活,我发现自己添加了很多assert代码,试图在程序运行时检查我的类型。除非我有100%的代码覆盖率测试(我当时没有),否则我无法确定所有内容都是正确输入的。

实际上,这是我有时会想念的另一件事。可以在Python中编写语法正确的代码,而这些代码根本无法运行。在实际执行代码之前,编译器无法告诉您,因此在不经常使用的代码路径(如错误处理程序)中,您可以轻松地看到潜伏的错误。即使是使用%格式字符串打印错误消息这样简单的代码也会因为类型不匹配而在运行时失败。

我没有将Python用于任何GUI的东西,所以我不能对这方面发表评论。

答案 4 :(得分:8)

Python被认为(在Python程序员中:)是一种用于快速原型设计的优秀语言。没有太多无关的语法妨碍您的思考过程,因此您所做的大部分工作都会涉及到代码。 (与编写优秀的C ++相比,编写优秀的Python代码所需的习惯要少得多。)

鉴于此,大多数Python(CPython)程序员认为“过早优化是所有邪恶的根源”哲学。通过编写高级(且速度明显较慢)的Python代码,可以在应用程序即将完成时使用C / C ++绑定优化瓶颈。此时,通过适当的分析,您的处理器密集型算法变得更加清晰。这样,您可以以非常易读和可维护的方式编写大部分代码,同时允许加速。你会看到几个用C语言编写的Python库模块。

Python中的大多数图形库(即wxPython)都只是围绕C ++库的Python包装器,所以你几乎都在写一个C ++后端。

为了解决您的IDE问题,SPE(Stani的Python编辑器)是我使用的一个很好的IDE,而EclipsePyDev也可以完成工作。两者都是OSS,所以他们可以自由尝试!

[编辑] @Marcin:你有写作经验吗? Python中30k LOC?你应该提到谷歌的可扩展性问题也很有趣,因为他们是Python最大的支持者!此外,一个名为NASA的小型组织也经常使用Python;)请参阅"One coder and 17,000 Lines of Code Later"

答案 5 :(得分:5)

没有什么可以添加到其他答案,除了,如果你选择python你必须使用到目前为止没人提到的pylint之类的内容。

答案 6 :(得分:4)

判断python用途的一种方法是查看目前使用python的产品。这个wikipedia page有很长的列表,包括各种Web框架,内容管理系统,版本控制系统,桌面应用程序和IDE。

正如它所说here - “使用Python的一些最大的项目是Zope应用服务器,YouTube和原始的BitTorrent客户端。使用Python的大型组织包括Google,Yahoo!,CERN和NASA.ITA用它的一些组件。“

简而言之,是的,它“适用于开发独立复杂应用程序的生产”。许多其他语言也是如此,各有利弊。对于您的特定用例而言,哪种语言最好是主观的,因此我不会尝试,但通常答案将是“您的开发人员最了解的用户”。

答案 7 :(得分:2)

在较大的代码库中重构是不可避免的,缺乏静态类型使python中的这一点比静态类型语言更难。

答案 8 :(得分:1)

  

据我所知,他们也在google中使用了很多python。

嗯,我希望如此,如果我没有弄错的话,python的制造商仍在google工作?

至于Python的使用,我认为它是独立应用程序的一种很棒的语言。它在许多Linux程序中被大量使用,并且有一些很好的小部件集可以帮助开发GUI。

答案 9 :(得分:1)

Python是一种使用的乐趣。我经常使用它,并为C#中的工作编写了大量代码。在Python中编写UI代码有两个缺点。一个是没有一个ui框架被大多数社区所接受。当您使用c#编写时,.NET运行时和类库都可以协同工作。使用Python,每个UI库都有自己的语义,这些语义通常与您尝试编写程序的pythonic思维方式不一致。我不是在责怪图书馆作家。我已经尝试了几个库(wxwidgets,PythonWin [MFC包装],Tkinter),当我这样做时,我常常觉得我用Python以外的语言编写代码(尽管事实上它是python)因为库不是'完全pythonic他们是另一种语言的端口,如c,c ++,tk。

所以对我来说,我会用.NET编写UI代码(对我来说是C#),因为IDE&库的一致性。但是当我可以的时候,我会在python中编写业务逻辑,因为它更清晰,更有趣。

答案 10 :(得分:0)

我知道我可能会说明显而易见的事,但不要忘记开发团队的质量和他们对技术的熟悉程度会对您的交付能力产生重大影响。

如果你有一个强大的团队,那么如果他们熟悉的话,这可能不是问题。但是如果你有更多9到5岁的人不熟悉这项技术,他们将需要更多的支持,如果生产率的提高是值得的,那么无论支持的成本是多少,你都需要打电话。

答案 11 :(得分:0)

我只有一次python体验,我的垃圾cli项目。

我知道可能部分或全部问题取决于我对python的经验不足。

我发现这些事情令人沮丧:

  1. 很难找到一个好的免费IDE
  2. 对自动重构的有限支持
  3. 此外:

    1. 需要引入两级分组包和模块让我感到困惑。
    2. 在我看来,没有广泛采用的代码命名约定
    3. 在我看来,有些标准库API文档不完整
    4. 一些标准库不是完全面向对象的事实让我很烦恼
    5. 虽然有些python程序员告诉我他们没有这些问题,或者他们说这些不是问题。

答案 12 :(得分:0)

尝试Django或Pylons,用它们写一个简单的应用程序,然后决定哪一个最适合你。还有其他(如Turbogears或Werkzeug),但这些是最常用的。