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

转:

首先,我要搞清楚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") 来载入该程序集,然后你就可以使用其中的类和方法了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python应用02 Python服务器进化

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! **注意,在Python 3.x中,BaseHTTPServer, SimpleHTTPServer, CGIHTTPServer整合到http.server包,SocketServer…

天赋差的程序员,难道就只能半途而废吗?

全世界只有3.14 % 的人关注了数据与算法之美在很多人看来,也许优秀的程序员靠的就是与生俱来的强大天赋,外加蜻蜓点水般的时间付出,就能够炼就算无遗漏的编码技能。那么果真是如此吗?身为不太聪明的开发者难道就活该中途止步吗&am…

html让ul的li自动居中,css ul li导航菜单居中问题解决方法

昨晚群里一个朋友帮忙解决的问题,之前没有遇到过,题目如下:不改变html结构,使导航菜单垂直水平居中,导航宽度自适应屏幕100%,高度30px;单项高度28px,宽80px;兼容:ie6,ff,chrome,opera等主流浏览…

String是一个奇怪的引用类型

点击蓝字关注我们开局两张图,内容全靠刷。马甲哥看到这样的现象,一开始还是有点懵逼。这个例子,string是纯粹的引用类型,但是在函数传值时类似于值传递;我之前给前后示例的内存变化图吧:根因就是大多数高级…

js 浅拷贝直接赋值_浅析JavaScript解析赋值、浅拷贝和深拷贝的区别

一、赋值(Copy)赋值是将某一数值或对象赋给某个变量的过程,分为:1、基本数据类型:赋值,赋值之后两个变量互不影响2、引用数据类型:赋**址**,两个变量具有相同的引用,指向同一个对象,…

限时秒杀│中科院推荐!6个引自美国NASA盒子,玩转科学

比勤奋更重要的,是孩子的思维能力。从上幼儿园开始,很多父母很喜欢给孩子报各种兴趣班,比如钢琴班、英语班、乐高班、报各种各样的课程,就是希望孩子具有18般武艺,赢在起跑线上。其实除了外在的能力,不显山…

html语言可以写模版继承吗,Django框架(十一):模板介绍、模板语言、模板继承、HTML转义...

1. 模板介绍1.1 模板的功能产生html,控制页面上展示的内容。模板文件不仅仅是一个html文件。模板文件包含两部分内容:静态内容:css、js、html。动态内容:用于动态去产生一些页面内容。通过模板语言来产生。1.2 模板文件的使用通常…

sed-笔记

一.sed脚本编程的方法论 1. 在着手做之前要弄清楚想做什么。2. 明确地描述处理的过程。3. 在提交最终的改变之前反复测试这个过程。注1:检测脚本最好的方式,是使用不同的输入样本进行测试并观察结果。二.…

.NET6又出新版本,新增这几个大杀器!

.NET6 Preview4终于发布了,作为第4个预览版,伴随着Build2021发布的,器更新内容也是非常丰富的。推荐关注的有以下11项:引入最小 API异步流HTTP 日志中间件新项目中使用 Kestrel 作为默认启动IConnectionSocketFeature改进单页应用…

蜗杆参数法设计_技术贴 | 减速器结构及设计的注意事项

减速机器用于低转速大扭矩的传动设备,原理是把电动机、内燃机、马达或其它高速运转的动力,通过减速机的输入轴上齿数少的齿轮啮合输出轴上的大齿轮,从而达到减速的目的;大小齿轮的齿数之比,就是传动比。减速器是一种由…

听说热爱生活的人都关注了他们

全世界有3.14 % 的人已经关注了数据与算法之美在信息爆炸的时代快节奏的生活里 你是否曾有一瞬间觉得忙碌而空虚?以下10个优质公众号能让你在闲暇的时候不断的提升自我,拓宽视野愿以书卷气,行我路千里近现代史研究通讯ID:jxsdyjtx…

基于abp vnext制作项目脚手架

首先说明,尊重原创,本文是参考https://www.cnblogs.com/myshowtime/p/14507675.html这篇文章写的,里面内容有部分是直接拷贝过来的。感谢作者分享!!!前期准备工作使用命令 abp new LS.Template --template …

Windows Server 2012 DHCP 服务器中的新功能:故障转移和策略

Windows Server 2012 DHCP 服务器中的新功能如下: DHCP 故障转移:此功能提供让两个 DHCP 服务器服务于 同一子网或作用域的 IP 地址和选项配置的能力,前提是 DHCP 服务对客户端持续可用。两个 DHCP 服务器复制它们之间的租用信息,…

android mvc mvp 简书,浅析 MVP,MVC,MVVM模式(Android)

前言当我们接手一个项目的时候,经常会发现一个activity或fragment动辄上千行甚至上万行代码,这给阅读带来很大的困扰,如果想读懂代码,需要花费很多时间跟精力。引起这个问题的原因想必大家都了解,随着人员不断变动&…

android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java。为了加入到Java这一高薪行业,很多人会选择专业学习一下&#x…

最全知识点总结!| 大数据学习路线指南

全世界只有3.14 % 的人关注了数据与算法之美大数据是对海量数据进行存储、计算、统计、分析处理的一系列处理手段,处理的数据量通常是TB级,甚至是PB或EB级的数据,这是传统数据处理手段所无法完成的,其涉及的技术有分布式计算、高并…

数组 边界 检查的几种实现方法

检查传递给函数的数组边界常用方法1.传递指向数组第一个和最后一个元素的下一个位置的指针。2. 将第二个形参定义为表示数组的大小3.数组本身放置一个检测位三种实现方法&#xff1a;#include<iostream> using namespace std; int sumArray(const int *beg,const int *e…

欢迎来到开源的世界!

✉️ 请查收您的保姆级开源百科编程导航 致力于推荐优质编程资源 ????项目开源仓库&#xff1a;https://github.com/liyupi/code-nav跪求一个 star ⭐️大家好&#xff0c;我是鱼二&#xff0c;今天推荐一份开源知识入门的在线电子书《开源指北》。正如官方对这本书的描述&…

html图片宽度高度等比例绽放,css图片自动绽放大小,左右,上下居中

无标题页.pic{max-height:400px;max-width:400px;_width:expression("400px");_height:expression((document.documentElement.clientHeight||document.body.clientHeight)>400?"400px":"");/*_width:expression((document.documentElement.…

归纳推理测试没做完_朋友买了1斤紫菜,2年还没吃完,我教他这样做,2个月就吃完了...

朋友买了1斤紫菜&#xff0c;2年还没吃完&#xff0c;我教他这样做&#xff0c;2个月就吃完了紫菜成熟啦&#xff0c;这段时间回老家&#xff0c;都会看到紫菜养殖户脸上挂着笑容&#xff0c;因为今年的紫菜收成还不错。回家就为了拿紫菜&#xff0c;因为紫菜成熟的季节&#x…