28

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

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

尝试这个的经历让我觉得自己像一个小男孩,认为他是唯一能看到皇帝没有穿衣服的人。如果您使用的是 IronPython,我非常感谢您知道您如何处理它的以下方面:

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

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

更新:(2010 年 7 月)这个问题看起来已经过时了,现在有两个官方IronPython 工具用于 VSPyCharm,它们都显示出很大的希望,而当我写它时,它们都没有出现。感谢所有回答的人。对于那些对没有自动重构工具感到满意的人,我是否可以建议您永远不要使用具有良好自动重构功能的 IDE。拥有之后,您会想知道为什么您认为自己对 find-replace 感到满意,并且您再也不想在没有它的情况下工作。如果不出意外,即时重命名标识符而不必担心替换错误的文本的能力会改变您命名内容的整个方法。

4

12 回答 12

11
do you use the .NET framework without Intellisense?

是的。我只使用带有 IronPython 的 emacs。“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 语句。我正在开发的那种应用程序即将存在并至少维持十年。为了处理有缺陷的代码,我只赌三件事:可理解的代码、单元测试和广泛的日志记录。

Unit testing

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

** 更新 **

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

惊人的 !

于 2009-05-10T11:06:42.077 回答
10

Visual Studio 2010 的 IronPython 工具怎么样?

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

我认为这个加载项将涵盖您的大部分观点。

希望能帮助到你,

帕特里克

于 2010-06-22T14:16:59.687 回答
7

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

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

另一方面,IronPython 是围绕 .Net 框架的 Python 语言包装器。我发现它比 C# 好用得多,但仅此而已。我的 CPython 程序如果不进行大量返工就无法工作。IronPython 的电池不同。

如果您的目标是在 .Net 上高效,那么 IPy 可能还可以。但是,如果您正在寻求可移植的 Python 技能,那么我会避免使用它。

于 2009-05-21T23:42:45.667 回答
5

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

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

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

于 2009-05-15T22:55:49.083 回答
4

PyDev、Wing、PyCharm 和 IronPython Tools for Visual Studio 都支持 IronPython 下的 .NET 智能感知。我感觉 SharpDevelop 对 IronPython 也有智能感知。

IronPython 2.6 和 2.7 的启动时间都有很大改善。然而,它仍然比 CPython 慢得多。

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

pdb(Python 标准库调试器)与 IronPython 一起工作。PyDev、SharpDevelop 和 IronPython Tools for Visual Studio 都支持 IronPython 的调试。

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

我大量使用交互式解释器进行实验,偶尔也将其用作增强外壳。

于 2010-07-28T11:05:07.820 回答
3

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

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

类似的东西。一旦正确配置了引擎,并设置了路径和引用,您基本上可以使用脚本来处理任何事情。

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

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

于 2011-05-20T21:40:19.393 回答
2

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

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

于 2009-05-07T02:16:48.953 回答
2

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

1 & 2. 你说得对,对代码编辑或重构的支持并不多——适当的 Visual Studio 支持会很棒。

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

还没有做太多的交互式黑客,所以不能评论第四点。

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

也不知道单元测试 IDE 集成。

于 2009-05-10T10:19:37.337 回答
2

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

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

然而,我不是 cpython 专家,并且可以从 Iron Python 中获得比 cpython 更多的东西,因为我可以轻松地利用 .NET 平台,在这个平台上我更熟悉。我很失望,目前 cpython 中没有 Twisted 库的端口,这是我唯一喜欢的扩展 Python 库,因为它们在 .NET 中非常有用。

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

于 2009-05-10T10:27:44.290 回答
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% 未经修改即可运行。

于 2010-04-11T17:08:50.267 回答
1

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

于 2009-05-30T15:29:37.193 回答
1

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

于 2012-02-20T17:31:58.400 回答