Python - IronPython困境

15

我开始学习Python,目前非常喜欢它。但是,如果您能回答我几个问题,这些问题一直困扰着我,我找不到明确的答案:

  1. Python的C实现版本(从python.org获取)与IronPython之间的语言兼容性有何关系?它们是相同的语言吗?通过学习其中一种语言,我是否能够轻松地切换到另一种语言,还是像Java和JavaScript一样?

  2. IronPython库的当前状态如何?它落后于CPython库多少?我最感兴趣的是numpy/scipy和f2py。它们对IronPython是否可用?

  3. 从Python访问VB以及反向访问的最佳方法是什么(确切地说,是将一些Python库连接到Excel的VBA)?


CPython比IronPython有更多的Excel库:xlrd,xlutils,xlwt,openpyxl,pycel,pyxll,datanitro,xlwings,ExcelPython,expy。 - denfromufa
5个回答

18

1) IronPython 和 CPython 的语法几乎相同,它们之间的差异非常小。因此转换应该很容易。

2) IronPython 的库和 CPython 非常不同。 Python 库落后于 CPython,许多 CPython 可访问的库在 IronPython 下目前无法工作。但是,IronPython 直接访问整个 .NET Framework,意味着它本地可以访问其中最广泛的库之一,因此在许多方面它比 CPython 更领先。一些 numpy/scipy 库在 IronPython 中不起作用,但由于 .NET 实现不同,某些功能并不必要,因为性能特征不同。

3) 如果您正在使用 VBA,使用 IronPython 访问 Excel VBA 会更加容易。如果要自动化 Excel,则 IronPython 仍然更容易,因为您可以访问 Execl Primary Interop Assemblies,并使用与 C# 和 VB.NET 相同的库直接进行自动化。


1
+1,但公平地说,ctypes 的使用与 IronPython 桥接到 CLR 并没有太大的区别,因此它们都可以访问未包装的外部库。 - Nick Bastin
你知道是否有任何方法可以使用IronPython的插件自动化Excel吗?我想以这种方式开发一些插件,以便向用户分发,而不必支付完整的Visual Studio费用来获取VSTO。 - oob

11

Python的C实现(来自python.org的主要版本)和IronPython之间在语言兼容性方面有何关系?它们是相同的语言吗?通过学习其中一个,我是否能够顺利地转向另一个,还是类似于Java和JavaScript?

它们是相同的语言(目前处于2.5级别——据我所知,IronPython还没有更新到2.6级别)。

IronPython的库目前的状态如何?它与CPython库相比落后多少?我最感兴趣的是numpy/scipy和f2py。它们可以在IronPython中使用吗?

标准库在当前的IronPython中有很好的状态,但像你提到的那些巨大的第三方扩展远远不能与之媲美。由于ironclad的帮助,numpy已经开始变得可行,但是由于numpy是从IronPython进行的(如ironclad的0.5版本号所示),因此并不是生产级别的。而且,scipy非常庞大且杂乱无章,充满了C和Fortran编写的扩展:我没有第一手经验,但我怀疑除了CPython之外,不到一半的扩展甚至能够运行,更不用说在任何实现下运行得完美了。

从Python到VB的访问以及从VB回到Python的最佳方法是什么(确切地说是将一些Python库连接到Excel的VBA)?

IronPython应该通过.NET方法使其变得更容易,但通过win32all的COM实现,CPython也能够做到。

最后但并非最不重要的,务必查看书籍《IronPython in Action》——每次推荐它时我都会说,由于我曾经担任过技术审查员并与一位作者交情,因此我存在偏见,但我认为这本书客观上是.NET开发人员学习Python的最佳入门教材,同时也是Python爱好者学习.NET的最佳入门教材。
如果你需要全部的scipy(哇,但那就是一个多才多艺的计算科学家!-),CPython确实是当今唯一的真正选择。我相信其他大型扩展库(例如PyQt或Mayavi)也处于类似状态。然而,对于与今天的Windows进行深度集成,我认为IronPython可能具有优势。对于通用用途,CPython可能更好(特别是由于2.6版本中的许多新功能),除非您真的很想在单个进程内充分利用多个核心,在这种情况下,IronPython(没有GIL)可能再次证明优势。
无论如何,通过某种方式(甚至通过Jython在JVM上,或通过PyPy在特殊环境中)Python肯定是一种令人敬畏的语言,无论您为特定应用选择哪种实现!-) 请注意,您不需要坚持使用一个实现(尽管您可能应该选择一个版本——2.5以实现与IronPython、Jython、Google App Engine等的最大兼容性;如果您只关心“在我自己或虚拟控制下的计算机上的CPython”等部署选项,则选择2.6)。

2

IronPython版本2.0.2是当前版本,支持Python 2.5语法。下一个版本2.6预计在接下来的一个月左右发布(尽管我不确定团队是否已经设定了硬发布日期;这里是beta版),他们将支持Python 2.6语法。因此,将会有更少的Java转换为JavaScript,更多的Java转换为J# :-)
所有用Python编写的库都可以完美地工作。用C编写的库则更具问题性;有一个名为Ironclad的开源项目(充分披露:由我的公司开发和支持),目前版本为0.8.5,对numpy支持得很好,但并不涵盖所有scipy。我认为我们还没有测试过它与f2py的兼容性。(Alex Martelli提到的Ironclad版本已经一年多没更新,请避免使用那个版本!)
从IronPython调用常规VB.NET非常容易--您可以轻松实例化.NET类并调用方法(静态或实例)。调用现有的VBA代码可能会更棘手;有两个开源项目称为Pyinex和XLW,您可能想要查看一下。或者,如果您想要在Python中编写电子表格,那么总有Resolver One(另一个由我的公司提供的... :-))

1

1) CPython和IronPython实现的语言是相同的,或者最多相差一两个版本。这与Java和Javascript的情况完全不同,后者是由于某些愚蠢的营销决策而被赋予了类似的名称,但它们是两种完全不同的语言。

2) 以C语言实现的第三方库(例如numpy)必须仔细评估。IronPython有一个执行C扩展的工具(我忘记了它的名字),但有许多陷阱,因此您需要与每个库的维护者进行检查。

3) 我不知道。


0
  1. CPython 是用 C 来实现的,针对特定平台(如 Windows、Linux 或 Unix);IronPython 是用 C# 和 Windows .Net Framework 实现的,因此只能在安装了 .Net Framework 的 Windows 平台上运行。从语法上来说,两者是相同的。但我们不能说它们是一种语言。在 Windows 平台开发时,IronPython 可以轻松使用 .Net Framework。
  2. 截至目前为止,即 2009 年 7 月 21 日,我们发布了 IronPython 2.0.2,这是我们最新的稳定版本。您可以参考 http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython
  3. 通过 IronPython,您可以使用 .Net Framework 函数访问 VB。因此,如果您想掌握 IronPython,最好学习更多的 .Net Framework。

2
不是这样的。由于Mono项目的存在,IronPython和其他任何.NET应用程序(如C#)都可以在任何支持的平台上运行,例如Mac或Linux,而不仅仅是Windows平台。 - nilamo
并不是每个.NET应用程序都可以在Mono上运行,查看MoMA以了解可能存在的问题:http://www.mono-project.com/MoMA - Nemanja Trifunovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接