PythonNet:实现Python与.Net代码相互调用!

现在是多元化编程,每一个程序员都需要使用多门编程语言,特别现在是 AI 时代,对于我们.Net 程序员来说,就需要经常同时使用 Python 和.Net。
下面一个开源库,方便我们来突破 Python 和.NET 的界限。

Python.NET 是一个开源项目(https://github.com/pythonnet/pythonnet),它允许 Python 代码与.NET Common Language Runtime(CLR)进行交互,为.NET 开发者提供了一个强大的应用脚本工具。
通过 Python.NET,Python 程序员可以轻松地调用.NET 类库,而.NET 开发者则能够将 Python 脚本嵌入到他们的应用程序中,实现更加灵活和高效的开发流程。

使用方法

一、Python 调用.Net
1、安装依赖库(前提已安装 Python 环境)



pip install pythonnet

2、使用 C#创建一个类库,项目名称为:Util。



namespace Util
{
    public class MyClass
    {
        ///
        /// 数值相加
        /// 

/// /// /// public int Add(int a, int b) { return a + b; } } }

3、Python 调用.Net 库



import clr  
import sys  

# 加载自定义程序集(假设程序集名为 Util.dll)  
clr.AddReference('Util')  

# 从程序集中导入命名空间(假设命名空间为 Util)  
from Util import MyClass  

# 创建 MyClass 的一个实例  
my_instance = MyClass()  

# 调用 MyClass 的一个方法(假设方法名为 MyMethod)  
result = my_instance.Add(100, 200)  

# 打印结果  
print(result)

二、.Net 调用 Python
1、安装依赖库



Install-Package pythonnet

2、C#调用 Python 代码



// 引入 Python.Runtime 命名空间,这是 Python.NET 库的一部分,它提供了与 Python 互操作的功能。
using Python.Runtime;  

// 设置 Python 解释器 DLL 的路径。这里指定了 Python 3.10 的安装路径下的 python310.dll。
// 注意:这个路径应该根据你的 Python 安装位置进行调整。
Runtime.PythonDLL = "D:\\Python310\\python310.dll";  

// 初始化 Python 引擎。这一步是必需的,它负责启动 Python 解释器并准备环境。
PythonEngine.Initialize();  

// 使用 Python 全局解释器锁(GIL)确保线程安全。
// Py.GIL()返回一个实现了 IDisposable 接口的 GIL 上下文,使用 using 语句可以确保在代码块执行完毕后正确释放 GIL。
using (Py.GIL())  
{  
    // 动态导入 Python 的 numpy 模块。这里 np 变量将作为 numpy 模块的代理。
    dynamic np = Py.Import("numpy");  

    // 调用 numpy 的 cos 函数计算 cos(π*2)的值,并打印结果。由于π在 numpy 中表示为 np.pi,所以这里传入 np.pi * 2。
    // 注意:在 Python 中,cos(π*2)等于 cos(2π),其结果为 1.0(浮点数表示)。
    Console.WriteLine(np.cos(np.pi * 2));  

    // 从 numpy 模块中动态获取 sin 函数,并将其赋值给 sin 变量。
    // 这样,我们就可以直接通过 sin 变量调用 numpy 的 sin 函数了。
    dynamic sin = np.sin;  

    // 调用 sin 函数计算 sin(5)的值,并打印结果。
    Console.WriteLine(sin(5));  

    // 计算 cos(5) + sin(5)的值,并将结果转换为 double 类型,然后打印出来。
    // 注意:这里使用了 C#的类型转换语法(double)来将 Python 的浮点数转换为 C#的 double 类型。
    double c = (double)(np.cos(5) + sin(5));  
    Console.WriteLine(c);  
} 
 

 

 

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
评论 抢沙发
  • 武穆逸仙

    昵称

  • 取消回复

    请填写用户信息:

图片正在生成中,请稍后...