Python - IronPython困境

15 投票
5 回答
3709 浏览
提问于 2025-04-15 14:12

我刚开始学习Python,目前非常喜欢它。不过,有几个问题一直困扰着我,我找不到明确的答案,希望你能帮我解答:

  1. Python的C实现(从python.org下载的主版本)和IronPython之间的关系是什么?它们在语言兼容性上是一样的吗?学习其中一个,能否顺利转到另一个?还是说就像Java和JavaScript那样完全不同?

  2. IronPython的库现在是什么状态?它落后于CPython的库有多远?我主要对numpy/scipy和f2py感兴趣。它们在IronPython中可用吗?

  3. 从Python访问VB的最佳方法是什么?还有,如何反向操作(具体来说,就是将一些Python库连接到Excel的VBA)?

5 个回答

2
  1. 当前的IronPython版本是2.0.2,它支持Python 2.5的语法。接下来的版本2.6预计将在下个月左右发布(虽然我不确定团队是否已经确定了具体的发布日期;这里有一个测试版)。到时候,它将支持Python 2.6的语法。所以,从Java到JavaScript的转换会减少,而从Java到J#的转换会增多 :-)
  2. 那些用Python编写的库几乎都能完美运行。用C语言写的库就比较麻烦;有一个开源项目叫做Ironclad(顺便说一下:这是我公司开发和支持的),目前版本是0.8.5,它对numpy的支持还不错,但对scipy的支持就不全面了。我觉得我们还没有用f2py测试过这个项目。(下面提到的Alex Martelli的Ironclad版本已经过时了一年,请避免使用那个!)
  3. 从IronPython调用普通的VB.NET代码非常简单——你可以很容易地实例化.NET类并调用它们的方法(无论是静态方法还是实例方法)。调用现有的VBA代码可能会有点复杂;你可以看看一些开源项目,比如PyinexXLW。另外,如果你想要一个可以用Python编写代码的电子表格,那么可以考虑Resolver One(也是我公司的产品... :-)
11

Python的C实现(从python.org下载的主版本)和IronPython之间的语言兼容性是什么关系?它们是同一种语言吗?如果我学习了其中一种,能否顺利转到另一种?这就像Java和JavaScript的关系吗?

它们是同一种语言(目前是2.5版本,IronPython还没到2.6)。

现在IronPython的库状态如何?它落后于CPython的库有多远?我主要对numpy/scipy和f2py感兴趣。它们在IronPython中可用吗?

IronPython的标准库现在状态很好,但像你提到的那些大型第三方扩展还远远不够。由于有了ironcladnumpy开始变得可行,但在IronPython中并不是生产级别的(可以从ironclad的0.5版本号看出)。scipy非常庞大,里面有很多用C和Fortran写的扩展:我没有亲身经历,但我怀疑不到一半的功能能在除了CPython以外的任何实现上正常运行,更别提完美运行了。

从Python访问VB的最佳方式是什么?反过来又如何(具体来说是将一些Python库连接到Excel的VBA)?

通过.NET的方法,IronPython应该会更容易,但CPython通过win32all的COM实现也不算太难。

最后,强烈推荐一本书《IronPython in Action》——每次推荐这本书时我都说我有偏见(因为我曾是它的技术审稿人,并且和其中一位作者是朋友),但我认为它是.NET开发者学习Python的最佳入门书,同时也是Python开发者了解.NET的最佳入门书。

如果你需要完整的scipy(哇,那可是个超级厉害的计算科学家!),那么现在CPython真的是唯一的选择。我相信其他大型扩展(比如PyQt或Mayavi)也处于类似的状态。不过,对于今天的Windows深度集成,我觉得IronPython可能更有优势。对于一般用途,CPython可能更好(尤其是因为2.6版本的新特性),除非你真的想在单个进程中充分利用多个核心,这样的话IronPython(没有全局解释器锁)可能会再次占优势。

无论如何(甚至通过Jython在JVM上,或者在特殊环境中通过PyPy),Python绝对是个很棒的语言,无论你选择哪种实现来满足特定的应用需求!-) 请注意,你不需要只坚持一种实现(不过你可能应该选择一个版本——2.5以获得与IronPython、Jython、Google App Engine等的最大兼容性;如果你不在乎任何部署选项,除了“在我自己或虚拟控制的机器上的CPython”,那么选择2.6就可以了)。

18

1) IronPython和CPython的语法几乎是一样的,几乎没有什么区别。所以,从一个切换到另一个应该非常简单。

2) IronPython的库和CPython的库差别很大。Python的库更新得比较慢,很多在CPython中能用的库在IronPython下可能就不行了。不过,IronPython可以直接使用整个.NET框架,这意味着它有很多丰富的库可以用,所以在这方面,它比CPython要强大得多。有些numpy和scipy的库在IronPython下不能用,但因为.NET的实现方式,有些功能其实并不需要,因为性能特点是不同的。

3) 如果你是从VBA去访问Excel的VBA,使用IronPython会更简单。如果你想自动化Excel,IronPython也更容易,因为你可以使用Excel的主要互操作程序集,直接用和C#、VB.NET一样的库来进行自动化。

撰写回答