我对python很感兴趣,但是我在.NET环境中工作,所以我正在研究Iron Python,并想知道它将用于什么.
你能写一个应用程序吗?或者是否为您的应用添加脚本语言?
你们是如何使用它的?
在看了这两个项目之后,似乎两者都很相似.两者都运行在CLI之上,两者都具有python样式语法,都使用.NET而不是标准的python库.
那么,它们之间的区别和各自的优势是什么?
Python装饰器使用起来很有趣,但由于参数传递给装饰器的方式,我似乎已经碰壁了.这里我有一个装饰器被定义为基类的一部分(装饰器将访问类成员,因此它将需要self参数).
class SubSystem(object):
def UpdateGUI(self, fun): #function decorator
def wrapper(*args):
self.updateGUIField(*args)
return fun(*args)
return wrapper
def updateGUIField(self, name, value):
if name in self.gui:
if type(self.gui[name]) == System.Windows.Controls.CheckBox:
self.gui[name].IsChecked = value #update checkbox on ui
elif type(self.gui[name]) == System.Windows.Controls.Slider:
self.gui[name].Value = value # update slider on ui
...
Run Code Online (Sandbox Code Playgroud)
我省略了其余的实现.现在这个类是将继承它的各种SubSystems的基类 - 一些继承的类需要使用UpdateGUI装饰器.
class DO(SubSystem):
def getport(self, port):
"""Returns the value of Digital Output port "port"."""
pass
@SubSystem.UpdateGUI
def setport(self, port, value):
"""Sets the value of Digital Output port "port"."""
pass
Run Code Online (Sandbox Code Playgroud)
我再次省略了函数实现,因为它们不相关.
简而言之,问题是虽然我可以通过将其指定为SubSystem.UpdateGUI来从继承类访问基类中定义的装饰器,但在尝试使用它时我最终会得到此TypeError: …
有没有人尝试过使用IronPython的ASP.NET MVC?最近做了很多Python开发,在进入潜在的ASP.NET MVC项目时继续使用该语言会很不错.
我特别感兴趣的是利用LINQ等.NET功能来利用Python的动态方面,并想知道这是否可行.对于某些动态编程可能可行的另一条路径是C#4.0及其dynamic关键字.
思想,经历?
我已经在我的个人计算机上运行了mssql 2005,我希望运行一些python脚本.我正在寻找一种方法来对数据进行一些非常简单的访问.我想运行一些select语句,处理数据并且可能让python保存带有结果的文本文件.
不幸的是,尽管我对python有点了解并且对数据库有点了解,但是我很难通过阅读来判断一个库是否符合我的要求.理想情况下,我想要的东西适用于其他版本的mssql,是免费的,许可允许商业使用,使用简单,可能与ironpython一起使用.
我正在尝试使用IronPython作为Unity3D的外部脚本语言.IronPython执行所需的DLL在Assets\Plugins内部加载得很好.但是,当我尝试运行脚本时,我收到此错误:
PythonImportErrorException: No module named UnityEngine
IronPython.Modules.Builtin.__import__ (IronPython.Runtime.Calls.ICallerContext,string,object,object,object) <IL 0x0003b, 0x001cc>
(wrapper dynamic-method) object.__import__##5 (IronPython.Runtime.Calls.ICallerContext,object,object,object,object) <IL 0x0000e, 0x0004d>
IronPython.Runtime.Calls.FastCallableWithContextAny.Call (IronPython.Runtime.Calls.ICallerContext,object,object,object,object) <IL 0x00015, 0x00067>
IronPython.Runtime.Calls.BuiltinFunction.Call (IronPython.Runtime.Calls.ICallerContext,object,object,object,object) <IL 0x0000d, 0x00058>
IronPython.Runtime.Operations.Ops.CallWithContext (IronPython.Runtime.Calls.ICallerContext,object,object,object,object,object) <IL 0x00012, 0x000b0>
IronPython.Runtime.Importer.Import (IronPython.Runtime.PythonModule,string,IronPython.Runtime.List) <IL 0x0000d, 0x0006c>
IronPython.Runtime.Operations.Ops.Import (IronPython.Runtime.PythonModule,string) <IL 0x00007, 0x0003b>
(wrapper dynamic-method) object.<string>##1 (IronPython.Runtime.ModuleScope) <IL 0x0006b, 0x00210>
Run Code Online (Sandbox Code Playgroud)
脚本和'UnityEngine.dll'位于同一文件夹中.这是脚本:
import clr
clr.LoadAssemblyFromFile("UnityEngine.dll")
import UnityEngine
from UnityEngine import *
Debug.Log("Hello World from Python!")
Run Code Online (Sandbox Code Playgroud) 打包IronPython应用程序进行部署的最佳方法是什么?在浏览网页后,我提出的最好的事情(以及我目前正在做的事情)是将clr.CompileModules()我整个项目的.py文件粘合到一个.dll中,然后单独run.py执行此操作来运行dll:
import clr
clr.AddReference('compiledapp.dll')
import app
Run Code Online (Sandbox Code Playgroud)
但这仍然不是最理想的,因为这意味着我必须这样做
.dll,the .xaml和run.py启动器)此外,在IronPython与Visual Studio 2010进行了精彩的集成之后,感觉如此...... hacky.我完全不知道为什么没有针对IPy应用程序的集成构建系统,因为它总体上归结为IL无论如何.
理想情况下,我希望能够以某种方式.exe在.xaml内部合并一个单独的内容(我读到C#apps将XAML编译为BAML并将它们合并到可执行文件中),并且不需要安装IronPython来运行.这至少有一半可能吗?(我想如果exe需要一些额外的.DLL或者其他东西就可以了.重要的是它是.exe格式的.)
一些编辑要澄清:我已经尝试了pyc.py,但它似乎并不承认我的项目不仅仅是这样的事实app.py.它产生的exe的大小表明它只是"编译" app.py而不包含任何其他文件到exe中.那么,我如何告诉它编译我的项目中的每个文件?
为了帮助可视化,这是我项目的解决方案资源管理器窗口的屏幕截图.
编辑II:遗憾的是,唯一的方法是使用pyc.py并将每个文件作为参数传递给它.我对这种方法有两个问题:
编辑III:由于通过pyc.py命令行传递70个文件名将是不实用的,为了解决更优雅地构建IPy项目的问题,我决定增加pyc.py.
我添加了.pyproj通过/pyproj:参数读取文件的代码,解析XML,并从那里获取项目中使用的py文件列表.这一直很好; 但是,生成的可执行文件似乎无法访问属于我的项目的python子包(子文件夹).我的版本pyc.py与我的.pyproj阅读支持的补丁可以在这里找到:http://pastebin.com/FgXbZY29
当这个新pyc.py项目在我的项目上运行时,这是输出:
c:\Projects\GenScheme\GenScheme>"c:\Program Files (x86)\IronPython 2.7\ipy.exe"
pyc.py /pyproj:GenScheme.pyproj /out:App /main:app.py /target:exe
Input Files:
c:\Projects\GenScheme\GenScheme\__init__.py
c:\Projects\GenScheme\GenScheme\Agent.py
c:\Projects\GenScheme\GenScheme\AIDisplay.py
c:\Projects\GenScheme\GenScheme\app.py …Run Code Online (Sandbox Code Playgroud) 美丽的汤与铁蟒一起工作吗?如果是这样的铁蟒的版本?使用iron python在.net 2.0上分发Windows桌面应用程序是多么容易(主要是c#调用一些python代码来解析html)?
我有一个类库,通常从.net控制台或Web应用程序调用.它集成了各种组件,并依赖于app.config或web.config.
如果我想从脚本(即IronPython)中使用类库,我该如何让脚本使用配置文件?理想情况下,我希望能够在运行脚本时按照惯例选择配置文件(配置文件与脚本文件并排).
如果可能,我不想更改ipy.exe.config,因为如果没有IronPython的多个副本,这将无法扩展到多个配置?
任何替代品?
我有一个简单的IronPython脚本:
# Foo.py
import os
def main():
print( "Hello" )
if "__main__" == __name__:
main()
Run Code Online (Sandbox Code Playgroud)
它运行正常并打印Hello如果我用IronPython运行它:
ipy Foo.py
Run Code Online (Sandbox Code Playgroud)
按照IronPython中给出的说明- 如何编译exe,我使用以下命令将此IronPython脚本编译为EXE:
ipy pyc.py /main:Foo.py /target:exe
Run Code Online (Sandbox Code Playgroud)
执行Foo.exe会出现此错误:
Unhandled Exception: IronPython.Runtime.Exceptions.ImportException: No module named os
at Microsoft.Scripting.Runtime.LightExceptions.CheckAndThrow(Object value)
at DLRCachedCode.__main__$1(CodeContext $globalContext, FunctionCode $functionCode)
at IronPython.Compiler.OnDiskScriptCode.Run()
at IronPython.Compiler.OnDiskScriptCode.Run(Scope scope)
at IronPython.Runtime.PythonContext.InitializeModule(String fileName, ModuleContext moduleContext, ScriptCode scriptC
ode, ModuleOptions options)
Run Code Online (Sandbox Code Playgroud)
为什么找不到模块"os"?我该如何解决这个问题,这样我才能得到一个有效的EXE?
(请注意,这与IronPython无法导入模块操作系统的问题不同,因为如果我运行脚本,脚本工作正常ipy.exe.)
ironpython ×10
python ×7
.net ×2
asp.net-mvc ×1
boo ×1
decorator ×1
dynamic ×1
inheritance ×1
linq ×1
mono ×1
sql-server ×1
wpf ×1