你是如何使用IronPython的?

时间:2009-05-06 17:00:36

标签: ironpython

我很想喝一些现代的动态语言koolaid,所以我相信Michael Foord的博客和播客上的所有内容,我已经买了他的书(并阅读了一些内容),并添加了一个嵌入式IPy大约一年前大型现有应用程序的运行时间(虽然那是给别人的,但我自己并没有真正使用它。)

现在我需要做一些相当简单的代码生成工作,我将在一些.net对象(自定义,C#-authored对象)上调用几个方法,创建一些字符串,编写一些文件等等。 。

尝试这种体验的经历让我觉得这个小男孩认为他是唯一一个可以看到皇帝没穿衣服的人。如果你正在使用IronPython,我真的很感激你知道如何处理它的以下几个方面:

  • 代码编辑 - 您是否使用.NET框架而不使用 Intellisense?
  • 重构 - 我知道'重构'是关于解决与语言相关的繁忙工作,所以如果Python足够轻量级,那么我们就不需要了,但重命名之类的东西在我看来对迭代开发质量至关重要代码,无论语言如何。
  • 致残启动时间 - 解释性语言应该是好的事情之一是缺乏编译时间导致快速交互式开发。不幸的是,我可以编译一个C#应用程序并比IPy启动它更快启动它。
  • 交互式黑客攻击 - IPy控制台/ repl应该对此有好处,但是我还没有找到一种很好的方法来获取你交互式到达的代码并将其保存到文件中 - 从中​​剪切并粘贴控制台相当悲惨。并且控制台似乎保留了对您导入的.NET程序集的引用,因此如果您正在处理C#内容,则必须退出并重新启动它。在像LinqPad这样的东西上攻击C#似乎是一种更快更容易尝试的方法(并且具有适当的Intellisense)。你使用控制台吗?
  • 调试 - 这里的故事是什么?我知道IPy团队中的某个人正在开发一个命令行业余爱好项目,但我只想说我不会立即被命令行调试器所吸引。我真的不需要一些Python脚本的调试器,但是如果我使用IPy进行脚本单元测试,我会这么做。
  • 单元测试 - 我可以看到动态语言对此非常有用,但是有没有任何IDE测试运行器集成(比如Resharper等)。 Foord书中有一章关于这一点,我承认我还没有正确阅读,但它确实似乎涉及从命令提示符驱动一个控制台模式的测试运行器,这感觉是使用后的一大步像TestDriven.net或Resharper这样的集成测试运行器。

我真的很想相信这些东西,所以我仍然在假设我错过了一些东西。我真的想知道其他人是如何处理IPy的,特别是如果他们这样做的方式并不像我们刚刚失去了15年的工具开发价值。

更新:(2010年7月) 这个问题看起来很陈旧,现在有官方IronPython Tools for VSPyCharm这两个都显示了许多承诺,而且当我写这篇文章时都没有。感谢所有回答的人。对于那些幸福没有自动重构工具的人,我是否可以建议您永远不要使用具有良好自动重构功能的IDE。在你拥有之后,你会想知道为什么你认为你对find-replace感到高兴,而你再也不想没有它了。如果不出意外,立即重命名标识符而不必担心替换错误的文本位的能力会改变整个命名方法。

12 个答案:

答案 0 :(得分:11)

do you use the .NET framework without Intellisense?

是。我只使用emacs和IronPython。 “M- /”对我来说已经足够了。 当我真正需要有关SDK的信息时,我偶尔会切换到Reflector和MSDN。

Refactoring

当您说“重构”时,您的意思是“自动重构”。 编码时我做了很多重构。一些自动化可能会更好。 但我对手工重构很好。它还迫使我加入更多测试。 我从来没有广泛使用任何具有重构功能的IDE,也许这就是原因 我没有受苦。简单的搜索和替换对我来说很好。

Crippling startup time

是的,这是我的主要痛苦,尽管我正在使用4G Ram的3GHz四核, 运行359个测试用例需要50秒。一半的时间(25s)是启动时间!! 在导入大型模块时,IronPython似乎执行了一些非常繁重的处理任务。 我现在正计划将我的测试分成几部分来缓解这种痛苦。

Interactive hacking - Do you use the console?

我偶尔使用控制台,当我想尝试一些特殊想法时。没有问题。然而,大部分时间我都把我的想法写进了单元测试中。

Debugging - what's the story here?

如果调试意味着断点和变量检查。我只使用print语句来表示那些东西。 我正在努力的应用程序即将生存并保持至少十年。 为了处理有缺陷的代码,我只打赌3件事:可理解代码,单元测试和大量日志记录。

Unit testing

我从未接近你提到的任何工具。只需使用unittest.TextTestRunner。 除了可怕的创业时间,我没有任何其他抱怨。

**更新**

我刚刚升级到IPy 2.6B1并取得了惊人的成果。启动时间从25秒减少到6秒,我的整体测试时间从50秒减少到16秒!!!

令人惊讶!

答案 1 :(得分:10)

Visual Studio 2010的IronPython工具怎么样?

IronPython工具提供了Python代码编辑器,基于文件的项目系统和交互式 Python解释器,全部在Visual Studio 2010中,全部免费。 http://ironpython.net/tools/

我认为这个加载项会覆盖你的大部分要点。

希望它有所帮助,

帕特里克

答案 2 :(得分:7)

IronPython是一个很好的解决方案,但我会继续回到CPython for Windows。为什么?

根据我的经验,Windows下的CPython,Mac OS / X和* NIX几乎相同。我可以在每个环境中使用几乎所有的“电池”。我经常在Linux上开发应用程序并发送到Windows服务器。抛开线程的几个问题,我没有任何问题。

另一方面,IronPython是围绕.Net Framework的Python语言包装器。我发现使用它比使用C#更好,但这就是全部。如果没有大量的重做,我的CPython程序就无法运行。 IronPython的电池不同。

如果您的目标是在.Net上提高效率,那么IPy可能就好了。但是,如果你正在寻求便携式Python技能,那么我会避免它。

答案 3 :(得分:5)

我正在使用PyDev编写IronPython代码。我试图尽可能地分离.NET特定的代码,以便我可以从PyDev中运行(Iron)Python脚本。感谢PyDev,我可以使用Pylint,它可以在http://www.logilab.org/857找到。 PyDev的最新版本甚至能够根据文件或项目配置解释器。因此,我可以轻松地将解释器从IronPython切换到CPython,反之亦然。通过这种方式,我可以看到我的代码在Python实现之间是可移植的。 (虽然我没有使用,但Jython 2.5 RC也可以在PyDev中使用。)

使用Python和IronPython 2.5兼容代码,我可以在PyDev中使用重构,请参阅http://pydev.sourceforge.net/refactoring.html

如果它支持IronPython 2.x,IronPython Studio将是一个不错的选择,但遗憾的是,它不支持。

答案 4 :(得分:4)

用于Visual Studio的PyDev,Wing,PyCharm和IronPython工具都支持IronPython下的.NET intellisense。我有一种感觉,SharpDevelop也有IronPython的智能感知。

在IronPython 2.6和2.7中,启动时间有了很大改善。但它仍然比CPython慢​​得多。

自行车修理工和绳索是Python的两种流行的自动重构工具。我从来没有发现过他们中的任何一个。

pdb(Python标准库调试器)与IronPython一起使用。用于Visual Studio的PyDev,SharpDevelop和IronPython Tools都支持IronPython的调试。

我使用了集成的测试工具(Wing有很好的单元测试支持,SharpDevelop支持unittest和unittest2用于IronPython,PyDev和PyCharm也可能有很好的单元测试集成)。我更喜欢从命令行运行我的测试。 unittest2非常适合这种情况,因为它不需要编写自己的测试集合/运行代码。

我使用交互式解释器进行大量实验,偶尔也可以作为加强版的shell。

答案 5 :(得分:3)

我最近在我的项目中广泛使用IronPython(和一般的DLR)来处理各种事情。一些例子:

  • 我制作了一个基于模板的文档生成器,这些模板使用py脚本来构建和转换传递给模板渲染器的上下文变量(Excel,Word,html-> pdf)
  • 作为专用规则引擎的表达式评估程序。这些脚本保存在数据库表的一列中,并在运行时进行评估,以确定适用的规则。
  • 作为ETL引擎中的步骤。基本上我有一些组件可以读取Excel文件,我使用python脚本转换数据并创建NHibernate实体来填充数据库。
  • C#组件的动态配置脚本。
  • 需要从大量数据集创建的某些指标的计算引擎。我将Parallel扩展与预编译脚本相结合,到目前为止表现还不错。

这样的东西。正确配置引擎后,如果设置了路径和引用,则基本上可以使用任何脚本。

几乎所有这些东西都在asp.net mvc应用程序中运行,到目前为止一直很好。我发现ScriptEngine和ScriptScope之类的一些组件是线程安全的,因此我甚至可以在控制器等之间共享一个安装在IoC容器(例如Windsor)中的已配置引擎。

至于编辑,我大部分时间都是EditPlus。虽然快速编辑不是问题,但VS 2010 python编辑器往往有点不稳定。

答案 6 :(得分:2)

我对IronPython的使用仅限于为自己制作快速原型,所以我不能说太多。但是,如果您正在寻找特定于IronPython的IDE,IronPython Studio是可以通过的。它会给你一些Intellisense功能,虽然它有时有点不稳定,所以不要关闭那个MSDN文档窗口。它允许您像任何其他.Net项目一样进行交互式调试。如果您希望以这种方式制作GUI,它还支持Visual Studio 2008表单设计器。我没有尝试过,但它也可能支持使用TestDriven.net运行nUnit测试。

可悲的是,VS 2008提供的重命名和其他重构功能似乎不受支持。

答案 7 :(得分:2)

我在嵌入式环境中使用IPy来运行测试脚本。

1& 2.你是对的,没有太多的代码编辑或重构支持 - 适当的Visual Studio支持会很棒。

忽略你的第三点 - 解释vs编译是一个古老的论点。

还没有做过很多交互式黑客攻击,所以不能评论第四点。

我使用Visual Studio调试器来调试我的IPy脚本。

不了解单元测试IDE集成。

答案 8 :(得分:2)

我正在使用Iron Python,不幸的是,它不是专业的,而是作为我个人项目的快速开发语言。

Python是一种非常好的语言,易于使用,简洁但代码可读性和简单性。其中一些原因是它是一种动态语言,也是它的基本语法。

我是,但不是cpython大师,并且可以从ccthon中获得更多来自Iron Python,因为我可以轻松利用.NET平台,我更多地在家里。我很失望目前在cpython中没有Twisted库的端口,这是我唯一熟悉的扩展Python库,因为它们在.NET中非常有用。

当我用C#编码时,我还使用交互式窗口来测试.NET结构。

答案 9 :(得分:2)

我正在使用Python 2.6与IronPython 2.6进行一系列二十一点模拟,尽管炒作,IronPython似乎只是稍微慢了一些(可能大约10%?)代码非常简单,只是像:

def highcount(hand):
  total=0
  for c in hand:
    if c[1]==11 and 11+total>21:
      total+=1
    else:
      total+=c[1]
  return total

def dmove():
  if ( (dhand[0][1]==11 and dhand[1][1]==10) or 
       (dhand[0][1]==10 and dhand[1][1]==11) ):
    return 21 # should return blackjack

  while 1:
    lc=lowcount(dhand)
    hc=highcount(dhand)
    if lc>21: return lc # dealer busts
    if lc>=17: return hc # stand on soft 17
    if hc>=17: return hc # stand on hard 17
    dhand.append(deck.pop()) # hit otherwise

如果.NET VM优化类似于JVM的Hotspot,那么在较长时间运行时,IronPython可能会更快地运行模拟。

另一个需要注意的重点是,二十一点模拟很容易在多线程上产生,而CPython的GIL在速度提升方面完全没有价值。使用IronPython,我可以在四核中获得400%的全速加速,这真的很酷。

代码没有使用任何深奥的Python功能(这是一件好事),这意味着它在IronPython上100%未修改。

答案 10 :(得分:1)

我刚买了Foord的书,所以我现在才开始学习它。我真的希望将它用于Web开发,但遗憾的是我必须等到asp.net mvc支持它。我还打算将它用作Windows系统的脚本工具,因为我可以使用.net框架

答案 11 :(得分:1)

在工作中,我们针对SharePoint对象模型使用IronPython。它适用于许多比powershell脚本更大的小程序,但不适合需要作为工件部署到SharePoint中的程序。它非常适合在未安装Visual Studio的服务器上进行快速原型设计。我们通常使用Notepad ++作为我们的首选编辑器。