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

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

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

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

我真的很想相信这些东西,所以我仍在假设我错过了一些东西。我真的很想知道其他人是如何处理 IPy 的,特别是他们的处理方式是否让我们感觉我们刚刚失去了 15 年的工具开发经验。

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

有帮助吗?

解决方案

do you use the .NET framework without Intellisense?

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

Refactoring

当你说“重构”时,你实际上指的是“自动重构”。我在编码时做了很多重构。如果有一些自动化的话可能会更好。但我对手动重构很满意。它还迫使我进行更多测试。我从不使用任何IDE广泛使用重构功能,也许这就是为什么我没有受苦的原因。简单的搜索和替换对我来说很好。

Crippling startup time

是的,这是我的重大痛苦,尽管我正在使用4G RAM进行3GHz四核,但运行359个测试箱确实需要50秒。其中一半时间(25 秒)是启动时间!看来 IronPython 在导入大型模块时执行了一些非常繁重的处理任务。我现在计划将我的测试分成几个部分来减轻这种痛苦。

Interactive hacking - Do you use the console?

当我想尝试一些临时想法时,我偶尔会使用控制台。没问题。然而,大多数时候我将我的想法写进单元测试中。

Debugging - what's the story here?

如果调试意味着断点和变量检查。我只使用 print 语句来做这些事情。我正在开发的应用程序将持续存在并持续维护至少十年。为了处理有缺陷的代码,我只押注于三件事:可理解的代码、单元测试和广泛的日志记录。

Unit testing

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

** 更新 **

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

惊人的 !

其他提示

Visual Studio 2010 的 IronPython 工具怎么样?

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

我认为这个插件可以涵盖您的大部分观点。

希望能帮助到你,

帕特里克

IronPython 是一个很好的解决方案,但我一直回到 Windows 上的 CPython。为什么 ?

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

另一方面,IronPython 是 .Net Framework 的 Python 语言包装器。我发现它比 C# 好用得多,但仅此而已。如果不进行大量修改,我的 CPython 程序就无法运行。IronPython 的电池有所不同。

如果您的目标是在 .Net 上高效工作,那么 IPy 可能就可以了。然而,如果你正在寻求可移植的 Python 技能,那么我会避免它。

我正在使用 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 Studio 支持 IronPython 2.x,那么它会是一个不错的选择,但遗憾的是,它不支持。

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 的单元测试和单元测试2,PyDev 和 PyCharm 可能也具有良好的单元测试集成)。我更喜欢从命令行运行测试。unittest2 对此非常有用,因为它消除了编写自己的测试集合/运行代码的需要。

我经常使用交互式解释器进行实验,偶尔也将其用作增强的 shell。

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

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

像这样的东西。一旦正确配置了引擎,并设置了所有路径和引用,您基本上就可以使用脚本来完成任何事情。

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

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

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

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

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

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

忽略你的第三点——解释与编译是一个古老的争论。

还没有做过太多的交互式黑客工作,所以无法评论第四点。

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

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

我正在 Python 2.6 与 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 的热点类似,则很可能在较长的运行时间内,IronPython 可以更快地运行模拟。

另一个需要注意的要点是二十一点模拟很容易在多个线程上生成,而 CPython 的 GIL 在速度提升方面完全毫无价值。使用 IronPython,我确实在四核上获得了 400% 的加速,这真的非常酷。

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

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

Python 是一种非常棒的语言,它易于使用、简洁,而且代码具有可读性和简单性。部分原因在于它是一种动态语言,但也归因于它的基本语法。

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top