python for net_转:.NET 4.0 下使用 Python for .NET

袁阿苏
2023-12-01

转:

首先,我要搞清楚Python for .NET  ,IronPython 它们之间的区别。

Python 作为一门语言,其解释器(因为是解释型动态语言,所以我觉得称之为解释器 interpreter 比编译器 compiler 更合适)并不是只有唯一实现的。通常我们从 Python 官方网站下载的 Python 解释器其实只是一种用纯 C 语言的实现,大家习惯称之为 CPython。而目前流行的还有另外两种解释器: Jython 和 IronPython。前者是 Python 语言的 Java 实现;而后者则是 Python 语言的 .NET 解释器实现。IronPython 最终生成的是 .NET 的 IL 语言,所以和 .NET 相关很紧密;而 Python for .NET 则是在原有的 CPython 上的一个扩充,利用 CLR 的功能来访问 .NET 的平台和类库。总得来说:

Python for .NET : 适合大部分程序都是在 CPython 中运行的,只是在一小部分程序中需要访问 .NET 的功能。比如在一个 Python 系统中调用一个 .NET 实现的库;

IronPython :适合熟悉 Python 语言,希望开发 .NET 库或者利用 .NET 库的开发者。比如想用 Python 语法来开发基于 WPF 的应用程序。

根据我的需求,我决定使用 Python for .NET。要使用 Python for .NET,最重要的是两个组件:

Python.Runtime.dll :这是一个用 C# 编写的 .NET 程序集,和 CLR 类似,像个 .NET 虚拟机,提供访问 .NET 世界的功能;

clr.pyd : 这是一个 Python 模块文件,它连接 CPython 和 Python.Runtime.dll,起着桥梁的作用。

由于 .NET 平台和 Python 平台的版本众多,为避免编译出过多的版本组合,所以 Python for .NET 采用源代码形式进行发布。因此,要使用源代码,我们需要首先确定两件事情:

我们的目标 .NET 平台版本?当然,眼下最 IN 的要算是 VS2010 + .NET 4.0 组合啦;

我们的目标 CPython 版本?当前,Python for .NET 支持的 CPython 版本是从 2.3 到 2.7。

确定好版本后,作为源代码发布,当然要获得源代码。通过 Python for .NET 的 SourceForge 页面我们可以获得如何连接 SVN 的说明。或者我们可以直接从如下 URL 导出源代码:

https://pythonnet.svn.sourceforge.net/svnroot/pythonnet/trunk

该源代码里包含了一个用 VS2008 创建的解决方案,我们完全可以用 VS2010 对其进行转换,不会产生转换错误。

用 VS2010 打开项目后,依照如下步骤设置相应的 .NET 和 CPython 版本:

改变目标 .NET 版本:在项目“Python.Runtime”上右击鼠标,选择“Properties”, 然后选择“Application”标签,将“Target framework”设置为“.NET Framework 4”;

修改 buildclrmodule.bat 文件(注意,有两处!):

%windir%\Microsoft.NET\Framework\v2.0.50727\ilasm

/nologo /quiet /dll %ILASM_EXTRA_ARGS% /include=%INCLUDE_PATH%

/output=%OUTPUT_PATH% %INPUT_PATH%

改为

%windir%\Microsoft.NET\Framework\v4.0.30319\ilasm

/nologo /quiet /dll %ILASM_EXTRA_ARGS% /include=%INCLUDE_PATH%

/output=%OUTPUT_PATH% %INPUT_PATH%

修改 clrmodule.il 文件,主要是修改其饮用的

mscorlib 版本:

.assembly

extern mscorlib

{

.publickeytoken = (B7 7A 5C 56 19 34 E0 89 )

.ver

2:0:0:0

}

改为

.ver 4:0:0:0

修改

CPython 版本:右键点击“Python.Runtime”项目,选择“Properties”,在“Build”标签下的“Conditional

compilation symbols”设置,将默认的“PYTHON26”改变为我们想使用的“PYTHON27”;

最后,对“Python.Runtime”项目进行重新编译即可。

编译后,你就会得到

Python.Runtime.dll 和 clr.pyd 这两个文件。将这两个文件拷贝到任意位置(如果想在任何位置都可以使用,最好把这两个文件放在python

的sys.path 目录下,比如DLLs),然后创建测试用的 Python 脚本:

import clr

import sys

import System

print System.Environment.Version

# you can also print out the sys.path

print '-----'

for p in sys.path:

print p

print '-----'

要使用你自己开发的私有程序集,则需要先用 clr.AddReference() 函数对你的程序集进行引用。例如,你有一个名为”Test.dll“的程序集,你则需要先执行clr.AddReference("Test") 来载入该程序集,然后你就可以使用其中的类和方法了。

 类似资料: