如何在 C# 中运行 Python 代码

前言

Python是一门强大的编程语言。特别的是,它还具有众多出色的库(例如numPy,sciPy,pandas等),可以显著简化和加速开发。因此,在解决某些问题时,通过 Python 实现可能是最理想的方式!

但是,我们又希望代码能在 C# 中运行。

那么,可以试试pythonnet

pythonnet

pythonnet可以将 Python 代码集成运行在 .NET 4.0+ 的公共语言运行时(CLR)中。

需要注意的是,它并不是将 Python 代码编译成 IL 代码,而是将 Python 的 CPython 引擎与 .NET 运行时集成,以保证 CLR 可以使用现有的 Python 代码和 C-API 扩展,同时保持 Python 代码的本机执行速度。

Demo

1. 创建项目

创建一个控制台项目,引用 pythonnet Nuget 包。

注意,必须勾选“包括预发行版”,才能看到官方维护的 Nuget 包:

5366b7b83f344aa3380f3ec0c1b19c39.jpeg

计算机上需要安装 Python 3

2. 初始化

需要先设置Runtime.PythonDLL属性, 否则程序会抛出BadPythonDllException

28c3674e3cf3555f3d52c9d1419b9ec5.jpeg

具体文件位置对应你安装的 Python 版本和文件夹:

Runtime.PythonDLL = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),@"Programs\Python\Python310\python310.dll");PythonEngine.Initialize();

3. 使用 Python 库

所有对 python 的调用都必须在一个using (Py.GIL())块中。

使用Py.Import导入 python 模块后,你就可以正常调用对应的函数:

这里,我们使用了numpy库(需要已经 pip install):

dynamic np = Py.Import("numpy");
Console.WriteLine(np.pi);

4. 使用 Python 脚本

我们也可以执行 Python 脚本代码。

首先,创建DemoCode.py文件,定义了Demo类和SayHello方法,代码如下:

class Demo:def SayHello(self, name):return "Hello " + name

调用代码如下:

dynamic demoCode = Py.Import("DemoCode");  
//实例化 Demo 类
dynamic demo = demoCode.Demo();  
//调用 Demo 类的 SayHello 方法
Console.WriteLine(demo.SayHello("MyIO"));

最后,运行结果如下图:

f39268fbdf23e6c24d2becc8cf7f9115.jpeg

结论

利用pythonnet,在 C# 中运行 Python 代码就是这么简单!

添加微信号【MyIO666】,邀你加入技术交流群

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

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

相关文章

【QGIS入门实战精品教程】10.2:QGIS中DEM三维显示方法

QGIS中数字高程模型DEM三维显示方法。 参考阅读: 【ArcGIS Pro微课1000例】0006:ArcGIS Pro 2.5三维显示DEM数字高程模型 【ArcGIS Pro微课1000例】0005:ArcGIS Pro 2.5基于矢量数据制作拉伸三维地图案例 ArcGIS实验教程——实验二十六:ArcScene实现二维数据的三维显示 文章…

基于Dubbo框架构建分布式服务(三)

我们将上面开发的服务提供方服务,部署到2个独立的节点上(192.168.14.1和10.10.4.125),然后可以通过Dubbo管理中心查看对应服务的状况,如图所示: 上图中可以看出,该服务有两个独立的节点可以提供…

开篇-开启全新的.NET现代应用开发体验

01云原生技术底座畅想DaprMASA Framework研发管理研发协作平台:CI/CD、Application ManagementApplication Quota Management、Version Control、Troubleshooting、Testable网格应用程序管理API网关:Reverse Proxy、Traffic Control 、Security Strategy…

【QGIS入门实战精品教程】10.3:QGIS栅格DEM数据重复类方法案例汇总

QGIS栅格DEM数据重复类方法案例汇总:按表格重分类、按图层重分类。 参考阅读: 【GlobalMapper精品教程】029:栅格重分类案例详解 ArcGIS实验教程——实验四十三:ArcGIS栅格重分类(Reclass)案例详解 ArcGIS怎样获取重分类后各类所占的像元个数 文章目录 一、按表格分类二、…

QT添加rtmp库的时候出现问题

刚开始出现undefined reference to __chkstk的错误。 然后在vc里面找到chkstk.obj放到相关目录下并在工程文件直接添加: LIBS "E:\QTProjects\RTMP\RTMPDelayTest\librtmp\lib\chkstk.obj" 又出现了新的错误 E:\QTProjects\RTMP\RTMPDelayTest\librtmp\l…

@Before,@BeforeClass,@BeforeEach和@BeforeAll之间的区别

Before的代码在每次测试之前执行 BeforeClass在整个测试方法执行之前运行一次 如果您的测试类有十个测试,则Before代码将执行十次,但是BeforeClass将仅执行一次。 当多个测试需要共享相同的代码时,可以使用BeforeClass 。 建立数据库连接属于…

.NET MAUI 跨平台应用开发 I|.NET MAUI 跨平台基础

编辑:Alan Wang排版:Rani Sun微软 Reactor 为帮助广开发者,技术爱好者,更好的学习 .NET Core, C#, Python,数据科学,机器学习,AI,区块链, IoT 等技术,将每周三到周六&…

走出宣传,国产VR手机盒子到底哪家强?

国产VR手机盒子作为入门机是一个不错的选择,不过你知道哪一款更适合你吗? 从去年看虚拟现实还是一个遥不可及的梦,今年却真正的火起来了。各大厂商纷纷推出自家的VR设备,宣传活动如火如荼。爱尝鲜的你是否按耐不住? 如果你觉得动…

【ArcGIS Pro微课1000例】0024:自定义坐标系统---以阿尔伯斯投影(Albers)为例

在实际工作中,经常需要进行矢量数据或栅格数据的投影转换工作,但有时候ArcGIS中恰恰没有我们需要的坐标系,此时,就需要我们自定义坐标系。本文以阿尔伯斯投影(Albers)为例,讲解自定义投影的一般过程及注意事项。 文章目录 一、自定义坐标系二、投影转换一、自定义坐标系…

旧金山参议员提议发布“封杀令”,理由是马路不为机器人所服务

说实话,这个理由有够奇葩。 因为快递无人机所受限制颇多,渐渐地,越来越多的快递机器人被研制出来(这里的“机器人”,包括无人车和及机器人),用于城市的快递发送,比如国内的京东无人…

【QGIS入门实战精品教程】7.2:QGIS点状数据符号化设置案例教程

点状符号化的类型有:单一符号、分类、渐进、基于规则、点的位移、点聚类、热图。 相关阅读: 【QGIS入门实战精品教程】7.1:QGIS面状数据符号化设置案例教程 文章目录 一、单一符号二、分类三、渐进四、基于规则五、点的位移六、点聚类七、热图一、单一符号 跟面状符号一样,…

SpringCloud与Dubbo的比较

Dubbo 一、dubbo简介 Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。 Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力&#xff…

VR 技术加上 8K 画质! 2016 年里约奥运会亮点十足

据报道,2016 年里约奥运会将运用到 VR 技术。 最近,奥林匹克广播服务公司(OBS)表示出对虚拟现实技术的兴趣,其实用虚拟现实技术报道赛事已经不是什么新鲜的事了,之前 NBA 就这样做过,但是将奥运…

WPF 实现柱形统计图

WPF 实现柱形统计图WPF 实现柱形统计图作者:WPFDevelopersOrg原文链接: https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40;Visual Studio 2022;项目使用 MIT 开源许可协议;避免画线发虚DrawingContext…

100亿人口会挨饿吗?人工智能迎击全球粮食问题

给作物看病的AI、走路“长眼”的拖拉机、上帝视角的卫星数据分析——未来吃饭就靠它们了。 图片来源:Blue River Technology 人类又面临了一项危机——随着人口不断膨胀,到2050年人类总人口也许要达到100亿,然而,地球却没有等比例…

switch注意事项

Day03_SHJavaTraining_4-5-2017 switch注意事项:①switch语句接受的数据类型  switch语句中的表达式的数据类型,是有要求的    JDK1.0 - 1.4 数据类型接受 byte short int char    JDK1.5 数据类型接受 byte short int char enum(枚举)  …

SkiaSharp 之 WPF 自绘 粒子花园(案例版)

此案例包含了简单的碰撞检测,圆形碰撞检测方法,也可以说是五环弹球的升级版,具体可以根据例子参考。粒子花园这名字是案例的名字,效果更加具有科技感,很是不错,搞搞做成背景特效也是不错的选择。Wpf 和 Ski…

xshell连接ubuntu

1.更新资料列表 sudo apt-get update2.安装openssh-server sudo apt-get install openssh-server3.查看ssh服务是否启动 sudo ps -e | grep ssh4.如果没有启动,启动ssh服务 sudo service ssh start5.查看IP地址 sudo ifconfig如果出现xshell无法输入密码的情况…

教你从零开始搭建一款前端脚手架工具

本文系原创,转载请附带作者信息:Jrain Lau项目地址:https://github.com/jrainlau/s...前言 在实际的开发过程中,从零开始建立项目的结构是一件让人头疼的事情,所以各种各样的脚手架工具应运而生。笔者使用较多的yoeman…

微信小程序 --- 页面跳转

第一种:wx.navigateTo({}); 跳转: 注意:这种跳转回触发当前页面的 onHide 方法,将当前页面隐藏,然后显示跳转页面。所以可以返回,返回的时候触发 onShow方法进行显示: (项目的底部导…