有谁知道如何使用MSI包安装带有NGEN的二进制文件的IronPython 2.0?该负责人IronPython的网页说,NGEN选项将大大提高启动时间,但由于某种原因,它不是默认启用的.它实际上并没有说明你需要传递哪些MSI参数来启用它,我在网站上找不到文档页面,所以我希望有人知道.(澄清:我正在进行静默安装以分发到多台机器,所以我正在寻找命令行参数,谢谢)
我问这个是因为一个简单的"hello world"脚本的开始时间在我的笔记本电脑上大约5-6秒,2 + ghz Intel Core 2 Duo w/4gig.每次跑步都会发生这种情况.我希望这个NGEN选项可以解决这个问题,因为它现在很慢,几乎感觉我正在使用编译语言.
更新:srivatsn有正确的答案使用NGENDLLS = True命令行参数.
为了将来参考,这里是我用于静默安装IronPython 2.0的完整MSI命令行:
msiexec /qn /i "IronPython.msi" NGENDLLS=True
Run Code Online (Sandbox Code Playgroud)
感谢Igal,但我实际上正在进行静默安装(通过msiexec/qn),以便集中分发到多台机器.有谁知道命令行参数(非UI)启用NGEN选项?
我有一个朋友,我正在努力教授如何编程.他来自一个非常基本的PHP背景,出于某种原因是ANTI C#,我想因为他的一些PHP圈子谴责来自微软的任何东西.
无论如何 - 我已经告诉他可以在VS2008 IDE中使用Ruby或Python,因为我已经在某处读过这是可能的.
但我很想知道.它是否真的那么实用,你可以在VS2008中使用Python做一切,你可以用C#或VB.net做.
我想没有开始辩论......我想知道你是否是使用VS IDE而不是VB.net或C#的开发人员,那么请根据你的经验给出答案.
如果您(像我一样)是VB.net或C#开发人员,请不要发布推测或主观答案.这是一个严肃的问题,我不希望它被视为主观的....
非常感谢你.
更新
到目前为止,我们已经确定IronPython是适合这项工作的正确工具.
现在它真的有多实用?
Mono例如在Linux中运行C#代码,但是......曾试图使用它吗?根本不实用,需要进行大量的代码重构,不支持.net v3.5等等......
我们都知道C#是一种静态语言,而Python是一种动态语言.但是我想知道Python有什么功能,c#没有.另外,在同一个应用程序中使用带有c#的IronPython是明智/有益的吗?
在我试图说服我的老板使用IronPython之前,我还应该重点学习哪些要点?
我查看了IronPython网站并完成了各种Google搜索以及搜索SO的答案,但我仍然不确定.
我想在C#ASP.NET MVC项目中使用Python,这样一旦项目部署完毕,我就不需要在托管应用程序的服务器上运行Python.
我认为这就是IronPython所做的,但我不确定,因为描述看起来并不是非常具体(或者我只是一个史诗般的菜鸟).
我可以在C#中定义一个基本上包含Python脚本的对象,对吧?也许这一切似乎都很好,这就是为什么我要问,这里有一个问题吗?
我目前正在使用DLR创建和执行一个简单的python计算:
ScriptRuntime runtime = Python.CreateRuntime();
ScriptEngine engine = runtime.GetEngine("py");
MemoryStream ms = new MemoryStream();
runtime.IO.SetOutput(ms, new StreamWriter(ms));
ScriptSource ss = engine.CreateScriptSourceFromString("print 1+1", SourceCodeKind.InteractiveCode);
CompiledCode cc = ss.Compile();
cc.Execute();
int length = (int)ms.Length;
Byte[] bytes = new Byte[length];
ms.Seek(0, SeekOrigin.Begin);
ms.Read(bytes, 0, (int)ms.Length);
string result = Encoding.GetEncoding("utf-8").GetString(bytes, 0, (int)ms.Length);
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)
哪个打印'2'到控制台,但;
我想得到1 + 1的结果,而不必打印它(因为这似乎是一个昂贵的操作).我将cc.Execute()的结果赋值为null.有没有其他方法可以从Execute()获得结果变量?
我也试图找到一种传递参数的方法,即结果是arg1 + arg2并且不知道如何做到这一点; Execute唯一的其他重载将ScriptScope作为参数,我以前从未使用过python.有人可以帮忙吗?
[编辑]这两个问题的答案:( Desco被接受为指向正确的方向)
ScriptEngine py = Python.CreateEngine();
ScriptScope pys = py.CreateScope();
ScriptSource src = py.CreateScriptSourceFromString("a+b");
CompiledCode compiled = src.Compile();
pys.SetVariable("a", 1);
pys.SetVariable("b", 1);
var …Run Code Online (Sandbox Code Playgroud) 我使用此代码使用IronPython执行python表达式.
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
scope.SetVariable("m", mobject);
string code = "m.ID > 5 and m.ID < 10";
ScriptSource source =
engine.CreateScriptSourceFromString(code, SourceCodeKind.Expression);
source.Execute(scope);
Run Code Online (Sandbox Code Playgroud)
有没有办法将生成的表达式树作为c#对象,例如BlockExpression
?
我在Ubuntu安装的服务器上使用python 2.6.5。
我需要为我们的应用程序集成一个API,在这种情况下,我需要使用API提供者提供给我的DLL。他们约API集成的代码示例是用Visual Basic编写...我做了对谷歌搜索,发现使用的一些例子ctypes,我尝试使用cdll和pydll,这引起了以下错误......
OSError:/home//some.dll:无效的ELF标头
一种可能性是使用IronPython,但是我对Ironpython的了解不多,所以我不确定它是否可以完全满足我的需求。
是否有任何可用的模块可以让我在python上使用该dll(或我不喜欢的模块)。升级我的python版本很难吗?
我有一个解决方案,它将在C#中构建一个GUI,我想在解决方案中创建一个IronPython项目,该项目将从C#代码中调用,但我甚至无法创建它.
我正在使用CodePlex和IronPython 2.7的python工具
编辑:这是我在ActivityLog.xml中找到的
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Reflection.TargetInvocationException: Failed to load language 'IronPython 2.7.2.1': Method not found: '!!1[] Microsoft.Scripting.Utils.ArrayUtils.ConvertAll(!!0[], System.Func2<!!0,!!1>)'. ---> System.MissingMethodException: Method not found: '!!1[] Microsoft.Scripting.Utils.ArrayUtils.ConvertAll(!!0[], System.Func2)'. at IronPython.Runtime.PythonContext..ctor(ScriptDomainManager manager, IDictionary2 options) --- End of inner exception stack trace --- at Microsoft.Scripting.Runtime.LanguageConfiguration.LoadLanguageContext(ScriptDomainManager domainManager, Boolean& alreadyLoaded) at Microsoft.Scripting.Runtime.DlrConfiguration.LoadLanguageContext(ScriptDomainManager manager, LanguageConfiguration config) at Microsoft.Scripting.Runtime.DlrConfiguration.TryLoadLanguage(ScriptDomainManager manager, AssemblyQualifiedTypeName providerName, LanguageContext& language) at Microsoft.Scripting.Runtime.ScriptDomainManager.GetLanguageByTypeName(String providerAssemblyQualifiedTypeName) at Microsoft.Scripting.Hosting.ScriptRuntime.GetEngineByTypeName(String assemblyQualifiedTypeName) at IronPython.Hosting.Python.GetEngine(ScriptRuntime runtime) at …
几天前我开始使用Python,我想我有一个非常基本的问题,我被卡住了.也许我没有在Python中正确地做到这一点,所以需要专家的一些建议:
我在一个包lib中有一个config.cfg和一个类测试,如下所示:
的Myproj/LIB /则pkg1 /的config.cfg
[api_config]
url = https://someapi.com/v1/
username=sumitk
Run Code Online (Sandbox Code Playgroud)
的Myproj/LIB /则pkg1/test.py
class test(object):
def __init__(self, **kwargs):
config = ConfigParser.ConfigParser()
config.read('config.cfg')
print config.get('api_config', 'username')
#just printing here but will be using this as a class variable
def some other foos()..
Run Code Online (Sandbox Code Playgroud)
现在我想在另一个包中的其他模块中创建一个测试对象
的Myproj /示例/ useTest.py
from lib.pkg1.test import test
def temp(a, b, c):
var = test()
def main():
temp("","","")
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
运行useTest.py给我错误:
...
print config.get('api_config', 'username')
File "C:\Python27\lib\ConfigParser.py", line 607, in get
raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'api_config' …Run Code Online (Sandbox Code Playgroud) 不久前,我们使用IronPython将Python脚本添加到Wpf应用程序中.起初,它只是"奴隶",因为例如按钮点击调用脚本然后只是运行完成将控制权返回给Wpf.后来我们添加了'master'脚本:脚本在它自己的线程中运行,并控制应用程序的其余部分.这是相当具有挑战性的,但过了一段时间,在现有的SO内容的帮助下,我们看起来很有效.从来没有真正使用它,直到现在,不幸的是事实证明它不能正常工作.核心原因是虽然有两个单独的STA线程(主要的Wpf一个和一个脚本),因此两个不同的Dispatcher实例,主线程似乎被阻止,因为脚本线程在循环中等待主线程完成(响应在脚本线程上处理的按钮单击并在主线程上启动事件).使用具有单独ui窗口的两个线程的全部意义当然不会发生.到底是怎么回事?
更新它是可重复使用最少的代码,所以我链接到它而不是在这里发布伪代码.在创建代码时,我发现当脚本线程创建的窗口未嵌入(设置MainWindow.hostedWin = false)时,不会发生死锁,并且一切都按预期运行.
回应评论所以有3个关注的线程发挥作用.我们称它们为Python,Ui和Process.Python启动Process并等待它完成.进程调用在Ui上调用.在那一点上不应该做任何事情:毕竟,它是阻塞的Python,而不是Ui,而这个结构的重点是Ui不应该与Python交互.好吧,除了它确实以某种方式.哪个是罪魁祸首.在僵局中,Ui坐在那里,PresentationFramework.dll!System.Windows.Interop.HwndHost.OnWindowPositionChanged(System.Windows.Rect rcBoundingBox) + 0x82 bytes而Process坐在WindowsBase.dll!System.Windows.Threading.DispatcherOperation.DispatcherOperationEvent.WaitOne() + 0x2f bytes那里,而Python就在Thread.Sleep.
这里发生了什么,以及如何解决它?
ironpython ×10
c# ×5
python ×5
.net ×3
architecture ×1
asp.net-mvc ×1
dispatcher ×1
dll ×1
linq ×1
python-2.7 ×1
python-3.x ×1
sta ×1
ubuntu ×1
wpf ×1