我热衷于喝点现代动态语言,所以我相信Michael Foord的博客和播客中的所有内容,我已经买了他的书(并阅读了其中的一些书),并在其中添加了嵌入式IPy运行时大约一年前的大型现有应用程序(尽管这是给其他人的,但我自己并没有真正使用它)。
现在,我需要做一些相当简单的代码生成工作,在这些工作中,我将在一些.net对象(自定义,由C#编写的对象)上调用一些方法,创建一些字符串,编写一些文件,等等。
尝试这种方法的经历使我感到自己像一个小男孩,他认为自己是唯一一个可以看到皇帝没有衣服的男孩。如果您使用的是IronPython,非常感谢您了解如何处理以下方面:
代码编辑-您是否在没有Intellisense的情况下使用.NET框架?
重构-我知道"重构"的工作量是围绕与语言相关的工作进行的,因此,如果Python足够轻巧,那么我们就不需要这样做了。但是对于我来说,重命名之类的东西似乎对于迭代开发高质量代码至关重要,无论语言。
缩短启动时间-解释语言的优点之一是缺少编译时间,无法快速进行交互式开发。不幸的是,我可以编译C#应用程序并以比IPy启动更快的速度启动它。
交互式黑客-IPy控制台/ REPL应该很好,但是我还没有找到一种好的方法来获取您以交互方式到达的代码并将其持久保存到文件中-从控制台进行剪切和粘贴是相当合理的悲惨。而且控制台似乎保留了对已导入的.NET程序集的引用,因此,如果您还使用C#,则必须退出并重新启动它。用LinqPad之类的C#进行黑客攻击似乎是一种更快,更轻松的方法来进行尝试(并具有适当的Intellisense)。您使用控制台吗?
调试-这是什么故事?我知道IPy团队中的某人正在从事一个命令行爱好项目,但是我们只能说我并没有立即被命令行调试器所吸引。我实际上并不需要使用少量Python脚本的调试器,但是例如,如果我要使用IPy编写脚本单元测试,那我就可以了。
单元测试-我可以看到动态语言可能对此非常有用,但是是否有任何IDE测试运行程序集成(例如Resharper等)。 Foord的书中有一章对此进行了介绍,我承认我尚未阅读正确,但是它似乎确实涉及从命令提示符处驱动控制台模式的测试运行程序,这感觉比从使用上迈出了一大步。集成的测试运行程序,例如TestDriven.net或Resharper。
我真的很想相信这些东西,所以我仍在假设我错过了一些东西。我真的很想知道其他人如何与IPy打交道,特别是如果他们以一种好像我们刚刚失去了价值15年的工具开发价值的方式来做事。
更新:(2010年7月)
现在,这个问题看起来已经过时了,因为既有针对VS的官方IronPython工具,也有针对PyCharm的工具,这两个工具都显示出了很大的希望,而在我撰写本文时都没有出现。感谢所有回答。对于那些没有自动重构工具而感到高兴的人,我是否可以建议您永远不要使用具有良好自动重构功能的IDE。拥有之后,您会想知道为什么您认为自己曾经对查找替换感到满意,而您再也不想再没有它了。如果没有其他问题,立即重新命名标识符而不用担心替换错误的文本位的能力将改变您命名内容的整个方法。
请问您在stackoverflow配置文件中的年龄是否真实?
您永远不要问老年人年龄。 不,当然不是。 Jeff Atwood要学习的东西比我的D-o-b还重要得多。
1do you use the .NET framework without Intellisense?
是。我只在IronPython中使用emacs。" M- /"对我来说足够好了。
当我确实需要有关SDK的信息时,有时会切换到Reflector和MSDN。
1Refactoring
当您说"重构"时,您实际上的意思是"自动重构"。
我在编码时做了很多重构。进行一些自动化可能会更好。
但是我可以手动重构。这也迫使我进行更多测试。
我从来没有广泛使用过具有重构功能的IDE,这也许就是为什么
我没有痛苦简单的搜索和替换对我来说很好。
1Crippling startup time
是的,这是我的主要痛苦,尽管我正在研究具有4G Ram的3GHz四核,
运行359个测试用例确实需要50秒钟的时间。一半的时间(25秒)是启动时间!
导入大型模块时,IronPython似乎执行了一些非常繁重的处理任务。
我现在计划将测试分成几部分,以减轻这种痛苦。
1Interactive hacking - Do you use the console?
当我想尝试一些特别的想法时,有时会使用控制台。没问题。但是,大部分时间我都是将思想写到单元测试中。
1Debugging - what's the story here?
如果调试意味着断点和变量检查。我只使用print语句处理这些内容。
我正在研究的那种应用程序将继续存在并保持至少十年。
为了处理有缺陷的代码,我只押注三件事:可理解代码,单元测试和广泛记录。
1Unit testing
我从来没有接近您提到的任何工具。只需使用unittest.TextTestRunner。
除了可怕的启动时间外,我没有其他抱怨。
** 更新 **
我刚刚升级到IPy 2.6B1,结果非常出色。启动时间从25s减少到6s,而我的整体测试时间从50s减少到16s!
惊人 !
+1关于emacs用于python开发
至于"重构"主题,我最近开始学习使用" ropemacs",这是emacs的python重构,它非常好。现在,我可以进行自动重构,而无需离开emacs。 :)
适用于Visual Studio 2010的IronPython工具如何?
IronPython工具提供Python代码编辑器,基于文件的项目系统以及交互式
Python解释器,都在Visual Studio 2010中,并且全部免费。
http://ironpython.net/tools/
我认为此外接程序将涵盖您的大部分观点。
希望能帮助到你,
帕特里克
IronPython是一个很棒的解决方案,但我继续回到Windows的CPython。为什么呢
以我在Windows下的CPython,Mac OS / X和* NIX的经验几乎相同。我可以在每种环境中使用几乎所有的"电池"。我经常在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,它将是一个不错的选择,但遗憾的是,它不支持。
适用于Visual Studio的PyDev,Wing,PyCharm和IronPython工具在IronPython下都支持.NET的智能感知。我觉得SharpDevelop也具有IronPython的智能感知能力。
在IronPython 2.6和2.7中,启动时间大大提高。但是它仍然比CPython慢??得多。
自行车修理工和绳索是两个流行的Python自动重构工具。我从来没有发现需要任何一个。
pdb(Python标准库调试器)与IronPython一起使用。 PyDev,SharpDevelop和Visual Studio的IronPython工具均支持IronPython的调试。
我使用过集成的测试工具(Wing拥有良好的单元测试支持,SharpDevelop支持IronPython的unittest和unittest2,PyDev和PyCharm可能也具有良好的单元测试集成)。我更喜欢从命令行运行测试。 unittest2对此非常有用,因为它不需要编写自己的测试集合/运行代码。
我大量使用交互式解释器进行实验,偶尔将其用作外壳。
您会明白我对启动时间的意思-它花费了您一年多的时间才能回答我的问题;-)有兴趣知道一旦完成实验,如何将代码从交互式控制台中提取到文本文件中。您只是重新输入吗?
我很少重复使用交互式解释器中的代码,而只是实验性的代码。如果您键入任何不重要的内容,请在python文件中进行操作!复制和粘贴短片段是可以接受的。
当我尝试在Iron Python中使用" pdb"时,出现以下错误:IronPython 2.7.6.3 (2.7.6.3) on .NET 4.0.30319.34209 (32-bit) Type"help","copyright","credits" or"license" for more information. >>> import pdb >>> pdb.set_trace() Traceback (most recent call last):`文件" ",中的第1行set_trace AttributeError: module object has no attribute _getframe中的文件" C: Program Files(x86) IronPython 2.7 Lib pdb.py",行1251
最近,我在项目中广泛使用IronPython(和一般的DLR)来做各种事情。一些例子:
我基于模板制作了文档生成器,该模板使用py脚本来构建和转换传递到模板渲染器中的上下文变量(Excel,Word,html-> pdf)
作为专用规则引擎的表达式评估器。脚本保存在数据库表的一列中,并在运行时进行评估,以确定适用哪个规则。
作为ETL引擎中的步骤。基本上,我有一些可以读取Excel文件的组件,并且我使用python脚本来转换数据并创建NHibernate实体来填充数据库。
C#组件的动态配置脚本。
用于需要从大量数据中创建的某些指标的计算引擎。我将Parallel扩展与预编译的脚本结合在一起,到目前为止,性能还不错。
像那样的东西。一旦正确配置了引擎,并设置了所有路径和引用,您基本上就可以对几乎所有内容使用脚本。
几乎所有这些东西都在asp.net mvc应用程序中运行,到目前为止一切正常。我发现ScriptEngine和诸如ScriptScope之类的某些组件是线程安全的,因此我什至可以在控制器等之间共享保存在IoC容器(例如Windsor)中的已配置引擎。
至于编辑器,大多数时候我都是EditPlus。尽管快速编辑不是问题,但VS 2010 python编辑器往往有些不稳定。
我正在Python 2.6和IronPython 2.6上运行一组二十一点模拟,尽管大肆宣传,但IronPython似乎稍微慢一点(也许降低了10%?)。代码非常简单,就像:
1
2
3
4
5
6
7
8def highcount(hand):
total=0
for c in hand:
if c[1]==11 and 11+total>21:
total+=1
else:
total+=c[1]
return total
和
1
2
3
4
5
6
7
8
9
10
11
12def 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%运行。
不幸的是,我不是专业地使用Iron Python,而是将其用作个人项目的快速开发语言。
Python是一种很棒的语言,它易于使用,简洁但代码可读性强且简单。部分原因是因为它是一种动态语言,而且是其基本语法。
但是,我不是cpython专家,我可以从Iron Python中获得比cpython更多的收益,因为我可以轻松利用.NET平台,而我在该平台上的工作能力要强得多。令我感到失望的是,目前尚无cpython中的Twisted库的端口,这是我感到满意的唯一扩展Python库,因为它们在.NET中非常有用。
当我用C#编码时,我还使用交互式窗口只是为了测试.NET结构。
我在嵌入式环境中使用IPy运行测试脚本。
1&2。没错,对代码编辑或重构的支持不多-正确的Visual Studio支持会很棒。
忽略您的第三点-解释还是编译是一个古老的论点。
尚未进行过多的交互式黑客攻击,因此无法评论第4点。
我使用Visual Studio调试器调试IPy脚本。
也不了解单元测试IDE的集成。
感谢您的回答,但我认为您对已编译和已解释位的弃置是错误的。 (Iron)Python的拥护者经常将开发的快速交互性视为优势。现实情况是当前的IPy版本不存在这种情况,因为对于小型应用程序,启动时间超过了编译时间。
嗯...您有一个示例程序来说明这一点?谢谢。
我对IronPython的使用仅限于为自己制作快速的原型,因此我不能过多地谈论它。但是,如果您正在寻找特定于IronPython的IDE,那么IronPython Studio是可以通过的。尽管有时会有些不稳定,它会为您提供一些Intellisense功能,因此请不要关闭该MSDN文档窗口。它将使您像任何其他.Net项目一样进行交互式调试。如果您希望以这种方式创建GUI,它还支持Visual Studio 2008表单设计器。我没有尝试过,但它可能还支持使用TestDriven.net运行nUnit测试。
遗憾的是,VS 2008提供的重命名和其他重构功能似乎不受支持。
谢谢-我知道IPyS,尽管我还没有尝试过,但是它被放弃的地位以及仅对IP1的支持并没有激发信心。
在工作中,我们针对SharePoint对象模型使用IronPython。对于许多比Powershell脚本大但不需要作为工件部署到SharePoint中的小程序而言,它是完美的选择。这对于在未安装Visual Studio的服务器上进行快速原型制作非常有用。我们通常使用Notepad ++作为我们的首选编辑器。
我刚买了Foord的书,所以现在我才开始学习。我确实希望将其用于Web开发,但遗憾的是我必须等到asp.net mvc支持它。我还计划将其用作Windows系统的脚本工具,因为我可以利用.net框架。
您可能对此stackoverflow.com/questions/441838/ironpython-on-asp-net-mvc很感兴趣
我正在看这个,但是似乎IronPython的MVC仍然很粗糙-它似乎只能与Views一起使用,而没有其他功能。